Archive for March 2012

Thursday, March 29, 2012

Lion’s Auto Save

Pierre Igot:

In addition to the questionable design choices and changes made by Apple’s engineers, however, there is also the very real and very problematic introduction of new bugs and new weaknesses.

It just seems buggy to me, especially for multi-application workflows.

Wednesday, March 28, 2012

VMware for Developers

Craig Hockenberry:

With the recent release of Mountain Lion DP2 some problems cropped up with Fusion 4.1 (you’ll need a developer account to view that link.) Luckily the new VMware Fusion Technology Preview 2012 makes it possible to run the latest Mountain Lion release without any problems. This preview release also allows you to keep Fusion 4.1 installed if you encounter any problems in other virtual machines: the only requirement is that you can only run one version at a time.

After several freezes, the technology preview worked for me. It seems strange that the VMs would be so hard to get working when not even using the VMware Tools.

Tuesday, March 27, 2012

The Mac App Store Needs Paid Upgrades

Wil Shipley:

Right now developers selling through the Mac App Store face a lose/lose choice: either provide all major upgrades to existing customers for free (thus losing a quarter of our revenue), or create a “new” product for each major version (creating customer confusion) and charge existing customers full price again (creating customer anger).

Update (2012-04-16): John Siracusa discusses this on Hypercritical #63. I found it interesting that in all the discussion of how one could lower prices and make it up in volume, no one mentioned the cost of providing ongoing technical support for those users. If you are not on a hockey stick growth curve, an increasing percentage of your customers will be non-paying, and yet they will still need just as much support.

Monday, March 26, 2012

The Pull-to-Refresh Patent

Dustin Curtis found that Twitter has a patent on Twitter/Tweetie’s pull-to-refresh gesture.

Update (2012-03-29): Buzz Andersen:

Ultimately, I decided to nix the pull-to-refresh idea and go with a straightforward button because I felt the whole thing was a bit too self-consciously clever and not discoverable enough (the above iteration of the design was actually an attempt to solve the discoverability problem, but I still never really warmed up to it). This, of course, seems silly now since we all know how well received the idea was, but it’s very easy to forget that at the time Loren and I were racing to build the perfect Twitter client, nobody really knew what an iOS Twitter client should look like.

Neven Mrgan:

Simple ideas like this will naturally occur to many people. A small percentage of those will have the ability to execute on them. A small percentage of those will then actually do so. And an even smaller group will combine it with an otherwise interesting product, thus making it into something.

Also, it’s been noted that this is a patent application; it’s not necessarily been granted yet.

Update (2012-04-17): Twitter:

The IPA is a new way to do patent assignment that keeps control in the hands of engineers and designers. It is a commitment from Twitter to our employees that patents can only be used for defensive purposes. We will not use the patents from employees’ inventions in offensive litigation without their permission. What’s more, this control flows with the patents, so if we sold them to others, they could only use them as the inventor intended.

isEqual: vs. isEqualToString: vs. compare:

Mark Dalrymple:

The conclusion I draw at this point is that your choice of isEqual: and isEqualToString: is purely stylistic. If you have a lot of isEqual: calls in a method comparing other objects, go ahead and use isEqual:. If you want to tell the reader that you’re only expecting strings to be involved, use isEqualToString:. I believe that the demonstrated corner case makes any safety benefits moot in choosing which method to use.

The main point I would emphasize is the need to check for nil before using compare:, because if the receiver is nil you’ll always get NSOrderedSame. I like to use category methods such as mjtCaseInsensitiveIsEqual: where the result from a nil receiver will be what you expect.

Update (2012-03-30): Dalrymple has a follow-up post.

App Rejections Are a Lousy Way to Communicate Policy Changes

Chris Adamson:

In both of these cases, we see Apple breaking with their own documentation or with long-established practice with no warning, and instead using app rejections as a tool to communicate and carry out new policies. This is wretched for developers, who get caught scrambling to fix problems they didn’t know they had (or didn’t expect just yet).

iBooks Isn’t Backed Up

Matt Neuburg:

As I’ve said, books can arrive on the device in ways that songs can’t. Suppose a book arrives via Dropbox or Safari on the device, and I transfer it to iBooks. Unless I take measures independently to make a separate backup, that may well be my only copy of the book. And such measures may not be easy to take, because the device, with respect to this strange music-and-movies-and-books category, is like a diode: current passes only one way. Just as you can copy music onto the device but you can’t copy it off again, so too you can get books onto the device but you can’t copy them off again. Meanwhile, the book isn’t being backed up to my computer — and it won’t survive migration to the next-generation device.

I mostly use GoodReader and the Kindle app, but I guess I should be careful with ePubs in iBooks.

Thursday, March 22, 2012

AnandTech Review of the Apple TV 3

Brian Klug:

If you’re squarely entrenched in the Apple ecosystem, there’s really no reason to not have an Apple TV. AirPlay mirroring (essentially WiFi Display) and AirPlay for audio (which is ALAC at around 1 Mbps) continues to be a big selling point. In addition iCloud support for all your purchased iTunes store content is an additional plus. On the other hand, if you’ve been holding out for a 1080p Netflix streamer, AirPlay endpoint, and iCloud box, the Apple TV 3 isn’t bad.

I just set mine up and found that video does indeed look a lot better than before, though not like Blu-ray.

What’s disappointing is that Apple TV still doesn’t offer a great way to view my photos. I’m not sure whether the Flickr and iTunes Home Sharing support were redesigned for 1080p, but either way the images look very JPEG-compressed. I suppose it’s possible that the higher resolution makes this more evident. But then why not download larger source images? Also, the Flickr app is still limited to displaying photos marked as public.

Using FlickStackr over AirPlay offers better quality. However, it doesn’t use the full height of the screen, and it’s a bit dodgy getting into, and staying in, AirPlay mode.

AirPlay using the iPhone’s Photos app is much faster and more reliable than FlickStackr, but the image quality is not great. It seems better than the Apple TV’s native apps. However, the photos look a bit blocky and show some compression artifacts.

Plugging a USB card reader into my Blu-ray player offers the best image quality but the least convenience.

Update (2012-04-14): Even the movie posters within the interface look heavily JPEG-compressed. There are halos of artifacts around all the text.

Wednesday, March 21, 2012

Firefox Switching to HTTPS Google Search

Christopher Soghoian:

First, the search query information from these users will be shielded from their Internet service providers and governments who might be using Deep Packet Inspection (DPI) equipment to monitor the activity of users or censor and filter search results.

Second, the search query information will also be shielded from the Web sites that consumer visit after conducting a search. This information is normally leaked via the “referrer header.”

Where to Speak on Your iPhone 4

Matt Neuburg:

I had been holding the iPhone wrong during speakerphone mode: I was holding the top microphone pointed away from me, because I thought “the microphone” was the one at the bottom during a call. Now that I know about it, I hold the iPhone better, and people on the other end can hear me better. Also, I use speakerphone less, out of sympathy with my callers. When you speak into the bottom microphone, you’re using superior electronics, because the bottom microphone is a better microphone, and you’re using noise cancellation. So if you want your caller to have a good listening experience, you should hold the iPhone up to your ear or use a headset of some sort — don’t use speakerphone mode.

I don’t know why I waited so long, but a year and a half ago I finally got a Bluetooth headset. It’s been great.

Objective-C Literals

The updated Clang documentation:

Using array and dictionary literals is safer than the variadic creation forms commonly in use today. Array literal expressions expand to calls to +[NSArray arrayWithObjects:count:], which validates that all objects are non-nil. The variadic form, +[NSArray arrayWithObjects:] uses nil as an argument list terminator, which can lead to malformed array objects. Dictionary literals are similarly created with +[NSDictionary dictionaryWithObjects:forKeys:count:] which validates all objects and keys, unlike +[NSDictionary dictionaryWithObjectsAndKeys:] which also uses a nil parameter as an argument list terminator.

There are lots of carrots for going 64-bit-only and adopting the modern Objective-C runtime.

Tuesday, March 20, 2012

Developer ID Gotcha

Daniel Jalkut:

So, my recommended fix either to use Xcode 4.3 to build your app, or mimic Xcode 4.3′s code signing behavior by stealing its codesign arguments (look in the build log after building on 4.3) and applying them verbatim in your build process.

Chris Suter:

If you need your application to work on older versions of OS X, you need to take care. By default, codesign will sign your application using a designated requirement that is built into the system. The default is controlled by the system that you are performing verification on, not the system that you’re signing on.

Update (2012-03-24): Ben Artin:

Where we run into problems is that the designated requirement embedded inside an application signed by Xcode 4.3 using an Apple Developer ID (which is required to support Gatekeeper in Mac OS X 10.8 Mountain Lion) is too complex for Mac OS X 10.5.x to understand. As a result, a Gatekeeper-enabled app running on Mac OS X 10.5.x always seems to be an impostor, which results in a variety of problems (such as the user always being prompted to allow the app to use passwords stored in the keychain, instead of being prompted only the first time — exactly the problem we ran into with Fetch 5.7.1).

He seems to have a better solution than Jalkut.

Don’t Use bcrypt

Tony Arcieri (via Hacker News):

If you’re already using bcrypt, relax, you’re fine, probably. However, if you’re looking for a key derivation function for a new project, bcrypt is probably not the best one you can pick. In fact, there are two ciphers which are each better in a different way than bcrypt, and also widely available across many platforms.

Welcome to the Brave New App Store World

Thomas Bauer:
Unfortunately, I will have to remove this feature if I still want to update my App in the App Store. The reason is that Spotlight is not ready for the sandbox and does not work in a sandboxed App. (Yes, this is the same Spotlight that was the key technology introduced in 10.4 Tiger and where every developer attending that WWDC was encouraged to do creative things with.)

Friday, March 16, 2012

The New iPad’s Screen Under the Microscope

Lukas Mathis:

It’s easy to conceptually understand the idea of quadrupling the pixel count, but once you actually see what this means, it’s frankly pretty astonishing. The iPad 2’s pixels look gargantuan next to the diminutive pixels from the third-gen iPad.

By the way, Apple’s PR makes it sound like there’s almost no space between individual pixels. While there’s much less space than on the old iPad, rows of pixels are still placed quite a bit apart from each other.

Thursday, March 15, 2012

Mountain Lion’s Address Book

Pierre Igot:

In addition, at this point it looks like there will be many perfectly good Macintosh machines that won’t be supported by Mountain Lion and will therefore be stuck with Lion (and its atrocious Address Book application) until their dying day.

If maintenance updates can add whole new apps (Mac App Store) and APIs (security-scoped bookmarks), surely they can also remedy horrible user interface regressions.

PaintCode 1.0

Jeff LaMarche:

I picked up a new app today called PaintCode. It’s targeted at developers, and all drawing actions are recorded as drawing code for OS X or iOS. This is a feature already available in Opacity, but the code generation seems to be the primary reason for PaintCode as opposed to Opacity, which is a drawing program that will export what you’ve drawn to code.

Sparrow iPhone and Push

The Sparrow Team:

The difference between the Mac and the iPhone is the Mac version is awake at all times. On the iPhone, iOS systematically suspends all apps activity after 10 minutes maximum making it impossible to send you notifications.

Apple has an API for apps to be notified in the background, but currently it’s only allowed for VoIP. So it’s not possible to build an iOS mail client that’s on par with the built-in one.

Sparrow Takes Flight

Ellis Hamburger:

The way Leca uses his Mac reflects his view of how applications should look. “I never use the e-mail Preview Pane in Sparrow, or the navigational sidebar,” he told told me. Instead he leaves Sparrow in its natural state: a simple list of e-mails that takes up a small fraction of his screen. In this way, he can work on other projects while seeing his e-mail inbox, because to him, the e-mail inbox is almost exactly like a to do list.

Sparrow’s design is very interesting, but it doesn’t fit with the way I use e-mail. I like to have a huge mail window that’s hidden when I’m not doing e-mail.

Wednesday, March 14, 2012

iPhoto’s Mystery Meat Gestures

Lukas Mathis:

After downloading and playing around with Apple’s new iPhoto for iOS, I felt like I was teleported back to 1998. Touching and gesturing in different ways would make seemingly random things happen. I regularly unintentionally activated features, changed views, opened or closed pictures, and got iPhoto into states I wasn’t sure how to get out of again.

Great article. It’s impressive what can be done with iPhoto for iOS. But I tried it before watching Randy Ubillos’s demo and was confused, even though I was familiar with many of the features from Aperture. The buttons aren’t labeled, and I missed many of the hidden gestures. There’s very little help within the app, and of course there’s no written manual.

AIM Is (Unofficially) Dead

Gizmodo links to this report from Nick Bilton (via Peter Maurer):

The AOL Instant Messenger group took the deepest cut so far. A former AOL employee said the group was “eviscerated and now only consists of support staff.” This person, who asked not to be named because they were not allowed to speak publicly about the company, added that “nearly all of the West Coast tech team has been killed.”

Somehow I find this more surprising than Encyclopaedia Britannica going out of print.

Tuesday, March 13, 2012

Chris Pirillo’s Father Tries Windows 8

John Gruber:

[I]t’s an eye-opener regarding the risk Microsoft is taking by making essential UI navigation elements hidden until you hover the mouse in the right spots. People navigate with their eyes, not by scrubbing the screen with the mouse.

TiVo Premiere Elite

John Siracusa is on fire in Hypercritical #58.

How Yahoo Weaponized My Work

Andy Baio:

In their complaint, Yahoo alleges that Facebook’s News Feed violates “Dynamic page generator,” a patent filed in 1997 by their former CTO related to the launch of My Yahoo, one of the first personalized websites. Every web application, from Twitter to Pinterest, could be said to violate this patent. This is chaos.

Monday, March 12, 2012

Recursive Mutexes Considered Harmful

David Butenhof (via Hacker News):

But nobody was supposed to use recursive mutexes. For the original intended purpose, only the global mutex would work anyway. And if you could analyze the code paths enough to know that a separate mutex was safe, why the heck would anyone want the overhead and complication of a recursive mutex instead of just doing it right?

Recursive locks were added to POSIX as a demonstration of attributes objects.

Update (2013-09-24): Brent Simmons:

David Butenhof explains, in 2005 in comp.programming.threads, why POSIX has recursive mutexes: “Because of a dare.” Inaccessible After July

Adam C. Engst:

There’s nothing wrong with Documents in the Cloud, as long as you see it as a virtual syncing cable and not as a collaborative work tool., weak as it was, at least tried to provide collaboration features in the form of Web-based manual file sharing, comments on shared iWork documents, and an ongoing chat-style discussion. Documents in the Cloud offers none of those features. had been in public beta for more than three years. It was pretty clear that Apple didn’t care about it and perhaps never knew what to do with it. Apple’s new model seems to be that a document is edited by one user in one app on multiple devices. It’s sort of pretending that workflows involving multiple apps or users editing the same document don’t exist.

It’s a shame that, as with the MobileMe Photo Gallery and Web hosting, Apple is setting an arbitrary deadline, not too far in the future, after which they will delete lots of user data that may not exist anywhere else. What if you’re away or don’t get the e-mail? And why make all the users migrate their data manually; why can’t Apple automatically transfer the documents to iCloud?

Quickly Sleeping Apple TV

Adam C. Engst:

One tip: press and hold the remote’s Menu button to jump quickly back to the main screen, where you can press and hold the center select button to put the Apple TV to sleep.

Objective-C Operators

Gwynne Raskind:

I do strongly support the concept of @== and @!= operators that equate to [object isEqual:] and its negation, as well as the associated @<, @> etc. operators. If one of the objects in question can be determined not to implement compare:, throw a compile error. If either operand is typed id, throw a runtime exception, exactly as [(id)[[NSObject alloc] init] compare:] would do now. In short, make the operators mere syntactic sugar, just like dot-syntax and the collection literals, rather than trying to toy with the runtime as @"" does.

The new collection literals and indexing syntax are no longer under NDA. The full details (e.g. the meaning of negative indexes) are still forthcoming, but it looks as though Apple got this right. Raskind’s proposal seems like a good next step.

Objective-C, Unversioned

Chris Lattner:

We’ve had internal discussions and have explicitly decided not to version the language any more. Instead of “Objective-C 2.0” or some such, there is now just “Objective-C as of Xcode 4.4” or “Objective-C in LLVM Compiler/Clang 4.0”.

If you’d like to reason about or conditionalize your code on various language features, please use the Clang feature checking macros.

It makes sense to check for features when writing code, but I think version numbers are useful for talking about, documenting, and referencing the language.


Lex Friedman:

Quick Look is a delightfully simple way to browse the contents of the files on your Mac without launching their parent apps. (Select a file, press the space bar, that’s it.) But if you’re looking at, say, a PDF or Word document, Quick Look can frustrate, because it doesn’t provide any way to select and copy text; if you find a snippet of text you’d like to copy and paste, you still need to launch the parent app.

I wonder why Apple never enabled this by default. Quick Look is a great idea, but it seems needlessly limited in what it allows users to do with the previews. Likewise, viewing applications using the Quick Look API can only access thumbnail images, not the full previews that generating applications make available to Quick Look.

Friday, March 9, 2012

iOS Breaks Launch Center Prefs URLs

David Barnard (via Lukas Mathis):

iOS 5 contains an undocumented URL scheme for the Settings app, which allows opening specific pages in the Settings from a third-party app. Example: prefs:root=General&path=Bluetooth will open the Bluetooth preferences.


To support this use case and probably others, too, I would like to request opening the URL scheme for the Settings app as a documented API, just like the sms: or tel: URL schemes.

Apple Mail Tip of the Day

Use the Keyboard pane in System Preferences to change the keyboard shortcut for “Add Sender to Address Book” to something that you won’t ever type by accident. I get e-mails from customers whose address books are full of spammy names and addresses, worried that their Macs were somehow hacked or infected, or that SpamSieve is malfunctioning. Nope, it’s just an unfortunate default key assignment. It’s easy to press Shift-Command-Y by accident when you meant to mark the messages as read/unread (Shift-Command-U, with U being next to Y on QWERTY keyboards). There’s no visual indication of what you actually did and no way to undo. In my view, this command shouldn’t even have a keyboard shortcut, but I don’t think there’s a way to remove it, so I changed mine to Control-Option-Shift-Command-Y.

Update (2012-09-06): On OS X 10.8 Mountain Lion, don’t forget to update your shortcut to use the new menu title: “Add Sender to Contacts”.

Update (2014-02-25): In Mac OS X 10.9 Mavericks, Mail no longer has a default keyboard shortcut for this command.

Thursday, March 8, 2012

Unable to Prevent iTunes From Downloading Videos

I just “purchased” 13 free TV episodes from iTunes on my Mac. I don’t want to watch them on the Mac, but I find it easier to browse on the big screen and click with the mouse than to use iOS or that sharp aluminum remote. I just wanted to get them into my “queue” for easy viewing later.

But iTunes insists on downloading them, multiple resolutions for each episode, and I can’t figure out how to make it stop. I’ve tried pausing the downloads and deleting them. I’ve unchecked “Always check for available downloads” in the preferences. I’ve deleted the temporary files in the Finder and restarted iTunes. No matter what I do, iTunes keeps restarting the downloads.

As far as I can remember, iTunes has always worked this way. The only “solution” seems to be to let it finish downloading and then delete the videos. I’d rather not fill up my SSD, waste bandwidth, and use up my Comcast quota.

Apple TV 3 and iTunes 1080p

Iljitsch van Beijnum:

The reason that the 1080p versions of the iTunes Store videos can be a good deal better without doubling the file size—or worse—can be found in the tech specs of the new AppleTV and the new iPad. The AppleTV now supports H.264 compression for 1920x1080 resolution video at 30 frames per second using High or Main Profile up to level 4.0, the iPad and the iPhone 4S the same up to level 4.1. The profile indicates what kind of decompression algorithms the H.264 decoder has on board—the "High" profile obviously has some tricks up its sleeve that the "Main" or "Baseline" profiles known to previous devices don’t support. The level value indicates how many blocks or bits per second a device can handle.

In my experience, the old iTunes “HD” videos were heavily compressed and looked only slightly better than DVD-quality. The new 1080p videos are a welcome improvement, but it seems that they don’t compare favorably with cable/satellite, much less Blu-ray.

I’m still not really sold on Apple TV. On the one hand, the selection is getting better. Apple no longer requires you to store and back up your own purchases. With three versions of each video, at increasingly higher resolutions, that was not very practical. Now you can just re-download from iCloud as needed.

On the other hand, TV shows are no longer rentable. If I’m going to buy, why lock myself into lower quality and DRM. It would make sense if I wanted to watch on iOS devices, but I don’t. And iTunes is still not very nice for browsing or searching; it has the wonderful column browser but actively tries to prevent you from using it.

It would be interesting if it could be an alternative to cable, but forces outside Apple’s control block that. Basic cable is almost free for me, in the sense that Comcast would raise my Internet rate by a corresponding amount if I were to unsubscribe from video. I pretty much only get a higher cable package to see NBA games. Apple TV now offers NBA league pass, but during the trial period I found that it was unreliable, the video quality was awful, and blackouts meant that nearly all the games I wanted to see were unavailable.

In short, Apple TV keeps getting better, but I don’t think it’s broken out of hobby status.

Update (2012-03-14): A follow-up article:

I was surprised to see how close the iTunes 1080p download comes to Blu-ray, considering that it’s only a fraction of the file size. And let’s be honest: there are lots of Blu-ray titles that look much worse than this iTunes download. But despite an impressive effort by Apple, Blu-ray still reigns king when it comes to image quality. And unlike iTunes titles, BRDs can have uncompressed multi-channel audio, multiple audio language options, and special features. Am I being greedy in wanting both good-looking downloads for convenience, as well as buy-once-play-anywhere Blu-ray discs of my all-time favorite movies?

The test screen was only 23 inches, and of course the photos don’t capture what movement looks like.

Update (2012-03-20): John Siracusa reviews the Apple TV 3. He doesn’t like the remote, either.

iPhoto and OpenStreetMap

Jonathan Bennett (via Casey Johnston):

Yesterday Apple launched iPhoto, its photo management app, for the iPad and iPhone… and we’re rather pleased to find they’re the latest to switch to OpenStreetMap.


The OSM data that Apple is using is rather old (start of April 2010) so don’t expect to see your latest and greatest updates on there. It’s also missing the necessary credit to OpenStreetMap’s contributors; we look forward to working with Apple to get that on there.

Not surprising that Apple is moving away from Google Maps, but I didn’t expect them to go with OpenStreetMap. I love the idea of the project, and the maps sometimes have interesting markings that Google is missing, but they just don’t look very good.

Appscript EOLed

Hamish Sanderson (via Clark Goble):

Apple declared the Carbon Apple Event Manager a legacy API in Mac OS X 10.6, advising it not be used for new development.

As of Mac OS X 10.7, the low-level Cocoa API (NSAppleEventDescriptor) still lacks essential functionality (e.g. the ability to send Apple events) while the high-level Cocoa API (Scripting Bridge) is too flawed and limited to be a viable foundation for an appscript-style wrapper.

Update (2012-03-09): Jonathan Rentzsch notes the Apple events APIs are not actually deprecated. This is true, however, the documentation for them is no longer searchable on Apple’s main site. It’s now in the legacy section of the developer library, which says:

The Mac OS X Developer Library — Legacy contains documents that are not applicable for current product development. Some of these documents describe older programming techniques that are no longer recommended. Other documents describe older features, interfaces, and programming techniques that are no longer supported. This information is available to help you maintain and update older code bases.

Whenever you view the documentation, you get a yellow pop-up that says:

Important: The information in this document is obsolete and should not be used for new development.

Update 2: AppleScript engineer Christopher Nebel (via Kevin Walzer):

Practical upshot: use the Objective-C APIs if you can; they’re a lot simpler to use if you’re already working in Objective-C. If they don’t do what you need (or if you’re using straight C for some reason), feel free to use the old-school AEM and OSA directly; there are no plans to remove them.

iTunes 10.6 Auto-Conversion

Kirk McElhearn:

As you may know, when you sync an iPod, you can have iTunes automatically convert your music files to a lower bit rate, so you can save space on a portable device. Previously, the only choice you had was 128 kbps. But iTunes 10.6 offers three choices: 128, 192 and 256 kbps.

The auto-conversion feature was originally restricted to iPod shuffles. Now, I use it to fit almost my entire music library onto an iPhone.

DreamHost Enhanced Security


The “Enhanced Security” option is our best solution for this. Although not a proper “jail” it will lock out all users from accessing your user’s home directory. If you do not share data between your users, this should be enabled for all of your FTP/SSH users.

I wasn’t aware of this option, having created my users long ago. There seems to be little reason not to enable it. It’s easy to accidentally end up with folders in your home directory that are world writable.


Mark Dalrymple:

Timing how long a block of code takes is a useful tool. Maybe you’re choosing between two different calls that do similar things and you’re wondering which one is faster. If one is faster, is it faster-enough to make any difference? The usual techniques involve using a profiler like Instruments, or calling a time function like gettimeofday() before and after your code and calculating the delta. Those of us on mach-based systems like iOS and OS X can use mach_absolute_time(), which is the finest-grained timepiece available on the system.

Instruments has its place, but I often prefer to the low-tech approach of adding logging and timing code directly to my app or unit tests. You can leave logging on while using the app normally, measure things on other people’s Macs, and keep a record of everything in version control.

Tuesday, March 6, 2012

Citing Tweets

Dr. Drang on the MLA Handbook:

The first problem, though, is the more important one. The purpose of citation is to show the antecedents of your work. And not just to show them—they must be shown in a way that allows others to look them up and check whether you’re quoting or using the references properly. The information in an MLA tweet citation doesn’t provide enough information for a researcher to find the tweet being cited.

Monday, March 5, 2012

Sandboxing and Code Collector Pro

Martin Pilkington:

Ever since the Mac App Store was released, sales through the M Cubed website have dropped off. Most of my sales now come through the App Store. This sounds good until you realise that in November March June Apple will be requiring all applications use the new sandboxing functionality in Lion. While Lighthouse Keeper was quite easy to fit in the sandbox, Code Collector Pro is impossible to.

So he’s going to stop selling it, open-source it, and focus on this other products. This is a bit surprising, since one would expect developers to look beyond the Mac App Store to find their tools.

Sunday, March 4, 2012

Frequent, Intense Mature and Suggestive Themes

Marco Arment:

The problem is how it’s worded: these apps don’t contain “Frequent/Intense” offensiveness, but the App Store makes it sound like they do. Rather, they are capable of accessing arbitrary internet content at the user’s direction, which could be offensive material if the user seeks it out.

Friday, March 2, 2012

ATPM 18.03

The March issue of ATPM is out:

Key-Value Observing Done Right: Take 2

Gwynne Raskind:

In Mike Ash’s article in 2008, circa Leopard, he described three major issues. Of those, only one has been solved since (the missing context parameter to observation removal). The other two, a lack of custom selectors and the uselessness of the context pointer, remain unsolved, and more issues have arisen since…


It is my personal opinion that KVO received so little attention because it was originally implemented as nothing more than a piece of the puzzle behind Cooca bindings. Cocoa bindings have been, in the opinion of many (including myself), a dismal failure in their intended purpose of making UI easy to wire up to code.

What follows is much cleverness, but this is really something that Apple should address in Cocoa itself.

Nobody Has It All Figured Out

Brittany Tarvin of FadingRed:

I wish I had known this when trying to make the difficult decision of going “indie” three years ago. I knew that no one was perfect, but I went through patches of insecurity where I imagined that every other entrepreneur out there in the world knew more about what it takes to be successful than I did, and that as a result I was not ready.

I think the key is to be motivated by your ignorance rather than discouraged by it.

Thursday, March 1, 2012

New Instapaper Bookmarklet

Marco Arment:

The new bookmarklet now also supports automatic saving of every page in multi-page articles.

Like the previous bookmarklet, it works for sites that require logins or payment, too: if you can view a page, you can save it to your Instapaper account. You don’t need to give Instapaper your passwords (I don’t want them) or require publishers to change their business models. If you can see it, you can save it.

iBookstore Rejects Book for Linking to Amazon

Seth Godin (via John Gruber):

I just found out that Apple is rejecting my new manifesto Stop Stealing Dreams and won’t carry it in their store because inside the manifesto are links to buy the books I mention in the bibliography.

Quoting here from their note to me, rejecting the book: “Multiple links to Amazon store. IE page 35, David Weinberger link.”

And there’s the conflict. We’re heading to a world where there are just a handful of influential bookstores (Amazon, Apple, Nook…) and one by one, the principles of open access are disappearing. Apple, apparently, won’t carry an ebook that contains a link to buy a hardcover book from Amazon.

As I recall, Apple had stated that, though the App Store was curated, the iBookstore would only reject books that violated common-sense guidelines. However, I was unable to find a copy of Apple’s approval guidelines for iBooks. Nothing is mentioned in the FAQ. There’s an uninteresting “eBook Distribution Agreement,” which you can read when you sign up to sell your books, but once you agree to the terms it becomes confidential.

Links are content just like words and images, and they should be untouchable. Censoring books in such a petty way should be beneath Apple. What’s next? If I write a book about blogging, do I have to link to MarsEdit in the Mac App Store instead of Red Sweater’s Web site? If a book cites the New York Times, does it have to link to the app (which has more 1-star ratings than all others combined) rather than the highly regarded Web site?

Whatever happened to competing by offering a better product for the customer? Amazon offers more books, better prices, a more pleasant store, better reader hardware, various software readers, and Web access to your annotations. Apple lets the iBooks app use special APIs, while preventing the Kindle iOS app from doing lots of useful things that would be possible even with the public APIs. And now it’s refusing to sell an e-book because it contains links that are, quite frankly, useful to the reader. Apple is trying to fight Amazon by making things worse for their mutual customers. I bet if they, instead, made a great book store, authors would freely choose to link to it instead of Amazon.