Archive for December 2, 2014

Tuesday, December 2, 2014

Rhapsody Developer’s Guide

Jesse Feiler’s 1997 Rhapsody Developer’s Guide is now available in PDF format (an OCR’d scan):

Based on a modern microkernel, Rhapsody runs on PowerPC and Intel processors, and supports traditional Mac OS applications (in the Blue Box) as well as modern applications in the Yellow Box. Totally object-oriented, the Yellow Box platform offers an unparalleled development environment that permits rapid implementation of functionality ranging from traditional personal computer applications to media-rich, Internet-enabled, and database-driven applications for the next century.

I think I still have a copy somewhere. It has examples in Java and in the “modern” Objective-C syntax.

Git Clones of

Nicolas Bouilleaud:

Apple publishes the code to the opensource components it uses at I wrote a small script that scrapes the projects metadata, downloads all the tarballs and recreates git repositories at

Push Notifications to Send Promotions

Marco Arment:

Regardless of the cause, this is clearly a promotion, will annoy thousands or millions of people, and is in direct violation of the least-enforced rule in the App Store.

If Apple won’t enforce its own standards against spamming and annoying customers — which really isn’t good enough — the least they can do is practice the rules themselves and be a good example.

Update (2014-12-10): Daniel Jalkut:

So Apple has complete control over the distribution mechanism, but zero ability (apart from metadata including the originating company and the target device) to examine the content passing through. Game over? I don’t think so.

Apple can still use its unique role as the center of all things iOS to devise a system through which they would themselves be virtually subscribed to all unremarkable notifications from a particular app’s developer. Think about the worst notification spam you’ve seen. In my experience it’s not super-personalized. In fact, it’s liable to be an inducement to keep using the app, to advance in a game, to become more engaged, etc. I think Apple would collect a ton of useful information about spammy developers if they simply arranged that every app on the App Store that is capable of sending push notifications included, among its list of registered devices, a “pseudo-device” in Cupertino whose sole purpose was to receive notifications, scan them for spammy keywords, apply Bayesian filters, and flag questionable developers.

Update (2018-04-18): Brad Ellis:

How to lose notification privileges forever[…]

JavaScript for Automation

Alex Guyot:

Since JXA is so new, there obviously was not much information to go by. I've never gotten around to learning AppleScript, so articles based on the classic OS X automation language were not much help either, although I’m not sure how much they would apply anyway. The result was quite a few wasted hours trying to figure out some of the most basic parts of JXA, such as proper syntax of method calls, which method calls worked with which apps, and how to identify UI Elements in order to trigger them with UI automation. Eventually I was able to figure these things out, so now I'm back to share what I learned.

Late Night Software:

Script Debugger 5 does not support the new JavaScript for Automation feature introduced by Apple in Yosemite (Mac OS X 10.10).

Ironically, we once offered our own JavaScript implementation for Script Debugger versions 2 and 3 and discontinued it due to lack of interest. We are watching how much adoption Apple’s JavaScript for Automation receives. Offering debugging for Apple’s JavaScript implementation is non-trivial so this isn’t something we can easily add back into Script Debugger.

Net Neutrality

George Anders:

Until about a year ago, Chiang and his colleagues thought their data-pricing idea had so much common-sense appeal that no one would regard it as an assault on net neutrality—even though it would let carriers charge people more for constant access. But then, as the debate heated up, everything got trickier. Ardent defenders of net neutrality began painting ever darker pictures of how the Internet could suffer if anyone treated anyone’s traffic differently. Even though Chiang and Saluja saw variable pricing as pro-consumer, they had no lobbyists or legal team and decided they couldn’t afford a drawn-out battle to establish that they weren’t on the wrong side.

For network engineers, DataMi’s about-face isn’t an isolated example. They fear that overly strict net neutrality rules could limit their ability to reconfigure the Internet so it can handle rapidly growing traffic loads.

Dipankar Raychaudhuri, who studies telecom issues as a professor of electrical and computer engineering at Rutgers University, points out that the Internet never has been entirely neutral. Wireless networks, for example, have been built for many years with features that help identify users whose weak connections are impairing the network with slow traffic and incessant requests for dropped packets to be resent. Carriers’ technology assures that such users’ access is rapidly constrained, so that one person’s bad connection doesn’t create a traffic jam for everyone. In such situations, strict adherence to net neutrality goes by the wayside: one user’s experience is degraded so that hundreds of others don’t suffer. As Raychaudhuri sees it, the Internet has been able to progress because net neutrality has been treated as one of many objectives that can be balanced against one another. If net neutrality becomes completely inviolable, it’s a different story. Inventors’ hands are tied. Other types of progress become harder.

Geoff Duncan:

President Obama wants the FCC to use Title II powers to prevent ISPs from selectively blocking or throttling Internet traffic, and to prevent them from engaging in “paid prioritization” plans that would (colloquially) divide the Internet into fast and slow lanes. The plan would also require transparency not just in how ISPs manage the last-mile connections to homes and businesses, but also how they interconnect with other networks and services elsewhere on the Internet. The idea is to treat the Internet like a “vital service,” and preserve the “open Internet” where all lawful Internet traffic is handled with equal, best-effort priority, regardless of an ISP’s relationships with competitors or other companies.


However, from a commercial viewpoint almost nobody wants to get into a business where the government can control prices: it restricts revenue and puts off investors — both major concerns for companies considering pouring billions (more) into broadband. ISPs would prefer that revenue result from innovation in an open market, not government rules. Paid prioritization deals — like the ones Comcast and Verizon have extracted from Netflix — might be an example. For ISPs, they’re a business innovation that generates money without raising end-users’ rates. To a content provider, they’re more like blackmail.


In the meantime, no open Internet protections are in force in the United States other than a handful of transparency requirements (and a few temporary restrictions on Comcast, due to its purchase of NBC Universal) — meaning, if an ISP decides it wants to block an application or a site, it must disclose that action. It also means ISPs like Comcast and Verizon are free to continue pursuing paid prioritization arrangements with companies like Netflix, Google, Amazon, and Apple.

View Bridge Logging

Daniel Jalkut:

This could be handy if you’re trying to work out the particulars of why or if a particular event is even reaching your extension. In fact the vast number of logging messages have often been carefully crafted to provide specific information that could be useful if you’re confused about an edge case.


It could all become pretty overwhelming, so if you want to limit the kinds of logs that make it to the system console, you can change the NSUserDefaults value from a blunt “YES” to a dictionary representation of the subset of domains you want to activate.

GaragePay’s Encryption Removed

Ilja A. Iwas:

GaragePay’s encryption feature is not compatible with Mac App Store’s sandbox requirement. Had to remove it to ship updates.

It looks like GaragePay managed encrypted disk images using hdiutil, which doesn’t work in the sandbox.