Archive for September 6, 2012

Thursday, September 6, 2012

Code by Kevin Leaves the Mac App Store

Kevin Walzer:

These apps have since been rejected three times by the App Store reviewers, and at least part of the problem was the permissions I was requesting for these apps in the sandbox environment. Specifically, the sandboxing environment won’t let me call a system command-line tool to launch Safari (to view my product’s web page) or Mail (so the user can contact me with questions).

This may be a small thing, but to me it’s the proverbial straw that breaks the camel’s back. I’ve used this functionality in my apps for years, I regard it as basic—the ability to contact me via an item in the help menu is simple customer service—and I am unwilling to remove it. Restricting such basic system access is simply ridiculous.

My guess is that he could get this particular functionality working in the sandbox by rewriting his apps to use a different API. However, one of the problems with the sandbox is that adopting it is an open-ended process. You can get one thing working and find that something else doesn’t work—either due to the sandbox’s design or a bug—or that it behaves differently on a different version of Mac OS X. Little of this behavior is documented.

This is also going to mean a change in my development processes. For the past couple of years I have had a cramped and limited view of what my apps could do; I wanted to make sure they did not run [afoul] of App Store guidelines. No more. I will go back to developing the way I prefer: taking full advantage of the Mac’s powerful resources.

Update (2012-11-03): Kevin Walzer:

None of my deep frustrations with the Mac App Store have changed—its slow review time, the technical limitations that sandboxing imposes, and more. But a rational assessment of where my sales comes from says that I can’t ignore the Mac App Store—it truly does enable sales that I couldn’t achieve elsewhere.

Condition Handling for Non-Lispers

cls (via Hacker News):

The possibility of an exception means that we have to manually build the list, because the recovery mechanism (aborting the try block) and the error handling mechanism (the except block) are tightly bound. Our clumsy exception handling system is actually stopping us from building the abstraction that deals with parsing an entire log. And as programming is essentially the art of abstraction, this is something a language should never ever do.

Conditions are an elegant solution.

Freeverse, RIP

Eli Hodapp:

Following the acquisition [by ngmoco], the Freeverse that Mac users spent over a decade following slowly started to vanish. Game releases stopped, the brakes got slammed on publishing, and over the next two years key Freeverse employees who had been with the company for years started leaving. Today, this is punctuated by the two founders walking away from the very company they invested so much of their life into.

And later:

Last Friday details leaked that co-founders Ian and Colin Lynch Smith were leaving Freeverse along with a few other long-time key employees. We may have been a bit hyperbolic at the time with the tombstone image and all that, but it seems that corporate overlord ngmoco wasted no time when it came to shuttering the studio. We’re now getting reports that less than a week later nearly the entire Freeverse office has been laid off, and may be closed entirely.

Hearts Deluxe was probably one of the first Mac shareware products that I purchased. Do these sorts of acquisitions ever work out well for the original customers? Hopefully the Lynch Smiths will found a new development shop.

Improved SICP PDF

Lytha Ayth and Neil Van Dyke have built a new PDF version of Structure and Interpretation of Computer Programs with better typesetting of the math and figures. From Abelson & Sussman’s introduction:

Our design of this introductory computer-science subject reflects two major concerns. First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read and only incidentally for machines to execute. Second, we believe that the essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs, nor clever algorithms for computing particular functions efficiently, nor even the mathematical analysis of algorithms and the foundations of computing, but rather the techniques used to control the intellectual complexity of large software systems.

Update (2017-03-22): See also: this unofficial Web version with better formatting (via Hacker News).

Block-Based Dictionary Enumeration Can Be Pretty Slow

You’d expect that -[NSDictionary enumerateKeysAndObjectsUsingBlock:] would be faster than fast-enumerating the keys and then looking up the objects, as it could access both at the same time while walking the hash table. However, Mike Abdullah found that it’s actually much slower.

Migrating From NSMutableDictionary to NSCache

Mike Abdullah notes that you can’t rely on NSCache to retain an object for you, even an object that you just inserted into the cache.

Textastic 4.2.1

Textastic, the programmer’s text editor that long available only on the iPad, now has an iPhone version. It has lots of good editing features, but I do not expect it to fare well in my iPhone text editors comparison. It uses a “download” model rather than live editing files in a folder, and it does not support multi-file searching.