Archive for August 28, 2013

Wednesday, August 28, 2013

Blind 1.0

Blind is “a 1x Web browser for Retina displays” (via John Gruber). The developer says it’s more accurate than Safari’s “low-resolution mode,” which I guess refers to the awkward setting in the Get Info window. There’s also a bookmarklet to send the current page in another browser to Blind. There’s no trial, but it’s only \$3 in the Mac App Store. After purchasing, I discovered that it doesn’t support AppleScript and uses Control-Command-U rather than the standard Command-L to focus the URL text field.

The Man Who Invented Modern Probability

Kolmogorov drew analogies between probability and measure, resulting in five axioms, now usually formulated in six statements, that made probability a respectable part of mathematical analysis. The most basic notion of Kolmogorov’s theory was the “elementary event,” the outcome of a single experiment, like tossing a coin. All elementary events formed a “sample space,” the set of all possible outcomes. For lightning strikes in Massachusetts, for example, the sample space would consist of all the points in the state where lightning could hit. A random event was defined as a “measurable set” in a sample space, and the probability of a random event as the “measure” of this set. For example, the probability that lightning would hit Boston would depend only on the area (“measure”) of this city. Two events occurring simultaneously could be represented by the intersection of their measures; conditional probabilities by dividing measures; and the probability that one of two incompatible events would occur by adding measures (that is, the probability that either Boston or Cambridge would be hit by lightning equals the sum of their areas).

I hadn’t heard of Nautilus Quarterly before. It looks interesting.

The Creation of Missile Command

One of the biggest changes made because of reactions gathered during a standard field test was the removal of a light-filled panel on the Missile Command cabinet above the player’s head. This panel displayed flashing lights that served as status indicators for each of the in-game bases, but during the field test, Theurer found that it distracted players too much. “They kept looking up to check the status lights and stuff, so we just chopped off the whole top of the cabinet and saved ourselves a whole lot of money and it didn’t hurt the gameplay any,” says Theurer.

Cocoa NSError Conventions

Follow Cocoa conventions for methods without parameters returning errors, i.e. `xxxAndReturnError:(NSError **)error` instead of just `xxx:(NSError **)error`.

The Cocoa APIs are inconsistent and use both patterns. Sometimes the `error` parameter is an `NSError`, other times an `NSDictionary`.

I dislike the ambiguity of `-save:` and the verbosity of `-saveAndReturnError:` (which, incidentally, returns a `BOOL`), so in my own code I’ve been using names like `-saveError:` (which has its own problems…).

Highpoint RocketStor 5212 Thunderbolt Dual Drive Dock

At peak, the drive pair transferred just over a gigabyte per second, much faster than the USB 3.0 version. With the Thunderbolt dock and hard drives, the speed of the transfer will generally be limited to the media, and not the bridge board as is common with lesser devices. The Thunderbolt version of the dock trumps both the USB 3.0 and, surprisingly, edges out the SATA-3 version of the dock, which, in theory, is capable of 12Mbit per second transfers.

Thunderbolt is daisychainable interface, much like Firewire before it. The 5212 dock has a solitary Thunderbolt port, making it either the last device on the chain, or only one.

This sounds good, but it’s \$219, compared with \$48 for the USB 3 version, though that requires two ports and apparently doesn’t let the drives spin down. I wonder whether the Thunderbolt version shares that problem.

I’ve been using several \$38 Newer Technology Voyager S3s. The performance is good, but despite powering them with a Smart UPS and connecting them directly to the MacBooK Pro (no USB hub), I’ve had lots of problems with the drives spontaneously unmounting during backups.

Microsoft’s Build System

The way that Microsoft builds software hasn’t been discussed much, but it’s worth an in-depth look because if you can’t build software effectively then you can’t make it good. You can get fit and polish on a product far more easily if you can turn it around and get rapid feedback, and Microsoft’s process here is broken.

Aligning Zoomed Images in Aperture 3

Joseph Linaschke has an old tip that’s new to me:

If you hover the mouse over any part of one of the images when you tap the Z key, Aperture will zoom into that point—but only for that image. If you are careful to have the mouse not pointing at any part of any image when you tap the Z key, then all images will zoom to the center. Great.

[…]

If you shift-click-drag on the white square inside the navigator, alignment will stay as-is. If you shift-click-drag outside the white square, then all images will align to the spot you clicked on. Perfect!

Marissa Mayer: An Unauthorized Biography

In the end, it proved to be an advantage for Mayer that empathy doesn’t come naturally to her. It forced her to be intentional about figuring out what users want and how they behave.

She came up with two clever methods of relating.

The first is that she would recreate the technological circumstances of her users in her own life. Mayer went without broadband for years in her home, refusing to install it until it was also installed in the majority of American homes. She carried an iPhone at Google, which makes Android phones, because so did most mobile Web users.

Mayer’s second method was to lean on data. She would track, survey, and measure every user interaction with Google products, and then use that data to design and re-design.

OmniKeyMaster

OmniKeyMaster is a simple app that finds App Store copies of Omni apps installed on your Mac, then generates equivalent licenses from our store - for free. This gives Mac App Store customers access to discounted pricing when upgrading from the Standard edition to Professional, or when upgrading from one major version to the next. Another benefit: since they don’t have to wait in an approval queue, our direct releases sometimes get earlier access to new features and bug fixes. OmniKeyMaster lets App Store customers access those builds, as well.

Note: While OmniKeyMaster lets you take advantage of upgrade pricing in the Omni store, it does not entitle to you to an App Store version of the upgraded app. Due to Apple’s App Store rules, the only way to get a Mac App Store copy of an application is to pay full price.

Presumably this is secure because the actual license is generated by their server. I wonder what happens if multiple Macs try to generate licenses for the same Mac App Store purchase.

Update (2013-09-04): Apparently Apple put an end to this customer-friendly idea. Ken Case:

So long as we continue to sell our apps through the Mac App Store, we are not allowed to distribute updates through other channels to apps which were purchased from the App Store.

And:

We certainly thought it would be allowed when we made it available last week! (And when we announced the plan in January.)

Principles of Reactive Programming

Coursera is offering what looks like an interesting course (via Hacker News):

The aim of the second course is to teach the principles of reactive programming. Reactive programming is an emerging discipline which combines concurrency and event-based and asynchronous systems. It is essential for writing any kind of web-service or distributed system and is also at the core of many high-performance concurrent systems. Reactive programming can be seen as a natural extension of higher-order functional programming to concurrent systems that deal with distributed state by coordinating and orchestrating asynchronous data streams exchanged by actors.

One of the instructors is Erik Meijer, creator of the Reactive Extensions (Rx) C# library.

Converting Pointers to C++ References in WebKit

It exposes unnecessary null checks by turning them into compile errors.

C++ doesn’t let you null check references, so you have no choice but to remove them. This is awesome, because it means smaller and faster code, both binary and source wise. The CPU doesn’t have to spend time checking if the object is really there, and you don’t have to spend time worrying about what to do if it isn’t.

CODE Mechanical Keyboard

WASD Keyboards and Jeff Atwood introduce the CODE keyboard:

Ultra-rare Cherry MX Clear mechanical keyswitches are the heart of the CODE keyboard. These switches are unique in the Cherry line because they combine solid actuation force with quiet, non-click activation, and a nice tactile bump on every keystroke. These hard to find switches deliver a superior typing experience over cheap rubber dome keyboards – without deafening your neighbors in the process.

[…]

On the CODE keyboard, up to six keys can be pressed at once, which is known as 6-Key USB Rollover. Furthermore, Ctrl, Alt, and Shift do not count towards these six keys, making it possible to to hold up to nine keys simultaneously – sufficient for even the most arcane keyboard shortcuts.

[…]

On the CODE keyboard, the Fn key replaces the Menu key (provided you’ve enabled it via the switches on the back of the keyboard), and moves the media shortcuts to the navigation cluster. This configuration allows you to comfortably and logically access multimedia shortcuts with one hand – pressing Page Up to turn up the volume just makes sense.

Notably, it does not support Bluetooth.

I was a longtime fan of the Apple Extended Keyboard II. Then I used the Matias Tactile Pro and Kensington Studioboard Mechanical Keyboard for a time but found problems with both of them. For the last five years or so, I’ve been using the aluminum Apple Keyboard and Apple Wireless Keyboard. I like how the latter has the exact same layout as the internal keyboard on my MacBook Pro. The key action is great, and I no longer miss the mechanical keyswitches. Still, I’m curious what the CODE is like.