Archive for March 27, 2014

Thursday, March 27, 2014 [Tweets] [Favorites]

The Parts of Your Platform

Justin Williams:

This is the one most people forget. Once you’ve developed your API and built the app(s) to consume it, you likely have a user base that is going to be emailing in support requests and bug reports. Those requests likely mean you need to look into the data stored on your backend.


The admin portal is the piece that most developers forget about until after they’ve shipped, but it can also be one of the most important part of your product once you reach a level of success.

The same is true of apps without cloud components. Even if your app is bug-free—and it’s not—you need to build in easy ways to get at the information needed for support.

Hypo Dependency Injection Framework

Wolf Rentzsch (via Edge Cases):

Hypo helps Cocoa coders write loosely-coupled classes. That is, classes that use the services of other classes but try to minimize assumptions.

It’s incredibly lightweight, although I’m not keen on using the _hypo ivar/property name suffix to annotate the required dependencies. With Objection, you would instead add a separate line such as objection_requires(@"engine", @"brakes").

Box’s IPO and S-1

Box’s S-1 statement:

Because we are still in the early stages of our development, we do not yet have enough operating history to measure the lifetime of our customer relationships. Therefore, we cannot predict the average duration of a customer relationship for the 2010 Cohort or for customers acquired in other fiscal years. We also cannot predict whether revenue from the 2010 Cohort will continue to grow at the rate of growth experienced through January 31, 2014, or whether the growth rate of other cohorts will be similar to that of the 2010 Cohort. We may not achieve profitability even if our revenue exceeds costs from our customers over time.

Tomasz Tunguz:

Box is among the fastest growing SaaS companies at this point in its life. Box’s revenue grew 110% in the last twelve months, about 2x the average rate of 53% of a SaaS company in its ninth year.


Box’s burn rate is twice as large as the next comparable firm, and nearly 10x the average. To drive its torrid revenue growth in the last 12 months, Box burned $168M, which is more than twice the next-most-cash-lax company, ServiceNow, which burned $74M in its ninth year en route to generating $424M in revenue.


Box spends about 137% of their revenue on sales and marketing.


Box spends nearly 3.7x as much on sales and marketing as research and development.

David Heinemeier Hansson has also been tweeting about this. The numbers give a very different picture than last fall’s Inc. Magazine story.

Apple Discourages Mac Kernel Extension Development

Landon Fuller:

My IOUSBFamily radar: “The issue is not going to be addressed … We discourage developers to do anything in kernel”

Wolf Rentzsch:

If this Radar response is accurate, it appears Apple will no longer publish OS X’s IOUSBFamily source code.

Landon Fuller:

Along with the kext signing approval requirements, I’d say the writing is on the wall: Apple’s not afraid to knee-cap Mac OS X, iOS-style.

I can see why Apple doesn’t like kernel extensions, but forbidding them, or locking out all but a few high-profile developers, would be bad for the future of the platform.

Do Expensive Audio and Video Cables Make a Difference?

Kirk McElhearn:

This journalist believes in magic. Note that he expressly talks about digital cables. While there is a possibility that there can be tiny differences in analog cables, this is simply not possible with digital cables, whether they are USB, HDMI or Ethernet.


Isn’t there another, more basic, way to use ‘digital’ cables, that doesn’t necessarily include error correction? I’ve read that ‘digital’ cables necessarily entail faultless transmission, but I don’t buy it. Digital cables are analog cables made to carry digital information. How you work with what comes out the other end depends on the circumstances. The OSI model doesn’t require reliable transmission on the physical layer (for obvious reasons), and some audio over ethernet protocols use this layer.

Kirk McElhearn:

In other words, when recording engineers set up to record very subtle music – this was a choir in a chapel, and the sound is very complex – they don’t use anything other than cables which, most likely, are thick and robust enough to withstand rolling, unrolling and people walking on them. If even recording engineers don’t use fancy cables, then why should anyone think that expensive cables are necessary to play back music; let alone expensive digital cables?

Kirk McElhearn:

The above review was for an audio interconnect; that’s the cable that you run from, say, a CD player to an amplifier. But look here, at a review for speaker cables from the same company: it’s exactly the same review! Word for word; it’s a copy and paste (though the header, Neutral, detailed and smooth, has been removed from the speaker cable review). Speaker cables and audio interconnects are two totally different kinds of cable, and it would surprise me that it is possible to say exactly the same thing about two different kinds of cable.

Geoffrey Morrison:

Dozens of reputable and disreputable companies market HDMI cables, and many outright lie to consumers about the “advantages” of their product.


Because it’s important to understand that it is impossible for the pixel to be different. It’s either exactly what it’s supposed to be, or it fails and looks like one of the images above. In order for one HDMI cable to have “better picture quality” than another, it would imply that the final result between the source and display could somehow be different. It’s not possible. It’s either everything that was sent, or full of very visible errors (sparkles). The image cannot have more noise, or less resolution, worse color, or any other picture-quality difference.

FireChat and Wireless Mesh Networking

Mike Elgan:

A curious download hit Apple’s app store this week: a messaging app called FireChat.

It’s a new kind of app because it uses an iOS feature unavailable until version 7: the Multipeer Connectivity Framework. The app was developed by the crowdsourced connectivity provider Open Garden and this is their first iOS app.


But here’s the really big deal — it can enable two users to chat not only without an Internet connection, but also when they are far beyond WiFi and Bluetooth range from each other — connected with a chain of peer-to-peer users between one user and a far-away Internet connection.

Update (2014-04-28): Edge Cases 89:

Wolf Rentzsch talks to Andrew Pontious about Apple’s new promising but troubled Multipeer Connectivity framework and his new app that takes advantage of it: Rumor Monger.

MacFixIt Is Gone

Ted Landau:

I began MacFixIt in 1996. After managing the site for four years, and watching it grow to a level I had never imagined possible, I sold MacFixIt to TechTracker in 2000. I remained as editor until 2002.


In 2007, CNET purchased TechTracker, including MacFixIt. This resulted in a dramatic transformation of MacFixIt. In my opinion, it was not a good change. While the MacFixIt name was retained, the site soon lost its distinct character. It was even hard to find the “site,” if you didn’t already know the URL; it was awkwardly located under the “Reviews” section of CNET. After a while, it seemed to me that there was little point in CNET keeping the MacFixIt name alive. I guess CNET finally came to the same conclusion.

Exposing NSMutableArray

Bartosz Ciechanowski:

Inserting object at index 0 uses the circular buffer magic to put the newly inserted object at the end of the buffer.


Whenever the buffer gets full, it is reallocated with 1.625 times larger size. […] Mike Curtiss has provided a very good explanation of why making resizing factor equal to 2 is suboptimal.


This is a shocker – __NSArrayM never reduces its size!


I’ve always had this idea of Foundation being a thin wrapper on CoreFoundation. My argument was simple – there is no need to reinvent the wheel with brand new implementations of NS* classes when the CF* counterparts are available. I was shocked to realize neither NSArray nor NSMutableArray have anything in common with CFArray.


Basically, CFArray moves the memory around to accommodate the changes in the most efficient fashion, similarly to how __NSArrayM does its job. However, the CFArray does not use a circular buffer! Instead it has a larger buffer padded with zeros from both ends which makes enumeration and fetching the correct object much easier. Adding elements at either end simply eats up the remaining padding.

Update (2014-04-14): David Smith notes that the Core Foundation creation functions will often now give you NS objects, whereas it used to be the reverse. Removing the Core Foundation layer yielded a 10–40% speed improvement. Marcel Weiher notes that the NS collections were originally faster and Core Foundation was a regression, for political reasons.

Zombies All the Time in Chrome

Avi Drissman notes that Google Chrome has NSZombie-like debugging code running all the time in the release builds.

Negotiating With Steve Jobs About WriteNow

Heidi Roizen:

For Steve, this contract wasn’t that important to the future of NeXT. While we would go on to pay Next about $5 million in royalties over the life of the contract, and were their first source of revenue, we were not central to his mission (Steve later teased me that he made more money collecting interest on his bank account than he made from me.). However, he had promised the developers 50%, he had said the number within earshot of everyone, and he wanted to be able to tell everyone he got what he wanted.

I had to make the business make sense financially. I just needed to make my 15% look like his 50%.