Don’t be encumbered by history –
go off and do something wonderful.
— Bob Noyce
Lately on Waffle
The Right Solution
In 2004, I read the story about original Macintosh logic board architect Burrell Smith, and his unusual way of playing Defender. He and everyone else who played Defender struggled with it the way the game was designed. But what he did one day was that he started by putting himself in the worst possible situation and learned to control it. He turned the tables of the game’s expectations while still operating inside its limits.
At the time, I occasionally started up the best Mac OS X Tetris clone that I’m aware of, Quinn, which is sadly unavailable due to legal threats by the Tetris company. (Quinn was previously described as “similar to a block-dropping game that, according to The Tetris Company, I am not allowed to name”.) I was never good at Tetris although I liked it; the earlier levels were boring and the difficulty got steeper so quickly once it got going.
The penny dropped months or maybe even a year after that. I started dropping the pieces directly into place even in the early levels. I played as if I was always under pressure to get the blocks into place. Of course the high score went up since I had earned more points by the time I couldn’t handle the difficulty, but I still didn’t last longer. However, as I kept going (I’ve played it daily pretty much every day since 2005), I did eventually get a lot better. My early high scores were around 50’000 and I’m currently at 221’524. (At the time of writing, it’s enough to place in the top 30 of today’s global Quinn high scores.)
I am not claiming any sort of innovation in my approach to this problem. More likely than not, the way I was playing originally was pretty brain dead. I am also not going to harp on spending 10’000 hours because I’m certainly not one of the world’s best Tetris players.
But I am better than I were. A lot better. I am just as frustrated when the game finally ends, but I have come farther.
Let’s connect this to another Waffle favorite; Douglas Adams’ Parrots, the Universe and Everything talk; his last ever and a good career cap. Towards the end, Douglas is asked why the Hitchhiker’s Guide series is rife with bitter references to digital watches and confides that when they were new, they were so crappy that they were an inconvenience. He then goes off on things that are stuck in horrid reinvention cycles, like hotel/airport bathroom faucets:
What do I do? Do I turn something? Do I push something? Do I pull something? Do I knee it!? (Laughter.) Do I just have to sort of be near it? (Laughter.)
While Douglas Adams is still right on this point eleven years later, he does end on another note:
But, I just think it’s wonderful we just sort of keep on inventing it even though it works, because it’s the way of getting ourselves off local maximums isn’t it?
I am the world’s biggest proponent for using the right approach for the right job. For example, I am not ashamed to use the sort of programming languages that C++ programmers look down on, which tends to be the sort of programming languages that aren’t C++. Even taken as gospel that C++ generates the most efficient machine code in the world, you’re probably not going to need the speed increase badly enough to lower your productivity. (Deserved as it mostly is, I don’t intend to rag on C++ or its programmers; it’s just a useful example.)
But on the other hand, sometimes you do need that. There are tough problems in the world and they need solving. Indeed, we should all be solving tough problems. If no one would, we’d still be living in caves.
I’ve been on the lookout and I’ve been seeing two very concrete examples of Burrell’s mentality. (In a stunning twist, both are Java projects.)
The first is a “pauseless” garbage collector. The second is a “disruptor” pattern with “mechanical sympathy”.
Both have a thing in common and both articulate it clearly: in order to solve the tough problems, you have to solve the hardest problem constantly and you have to invent a new way of doing it. We could have a discussion about which constituent parts already existed (I’m guessing most of them), or how they are making mostly-true statements on some ends because of the convenience it allows them in explaining things, or how they choose different words when words already exist, or whether parts of the problem was already being solved in similar ways before, and some people might shy away from these examples because of these things. I would be surprised at their reasoning; your definition of innovation, if I might use so foul a word, can’t be to literally reinvent everything. It wouldn’t be practical and it wouldn’t be useful. You can spend your life being bitter about other people’s success despite their faults, or you can revel in their advances.
You don’t need to solve every problem as if it is a hard problem. You don’t need your every fiber to sparkle with reinvention to avoid the taint of conventionalism. You should do what’s enough for the problem at hand. Faucets probably don’t need remaking yet again; if anything, maybe they need to be more consistent and labelled.
But every once in a while, at your pleasure and when the moment arrives, what’s enough will require you to take a step back and reevaluate everything. It will probably be more meaningful than Tetris, but you will enjoy it thoroughly. You will savor the challenge, you will twist your brain inside out, you will learn more about unexpected things and you will have fun.
Do it, and don’t look back.
A Gate With Destiny
On the one hand, I agree with Steven Frank.
But I can’t find it in me to disparage this goodwill effort that Apple has undertaken to not turn every third-party developer upside-down with regard to app distribution. To me it’s a great sign that they’re aware and at some level sympathetic to our concerns, while remaining committed to a high-security experience for users.
On the other hand, there are still some loose ends.
- Will Developer ID require that developers identify themselves beyond a nickname, an email address and a link? Why? (Or rather, why the lucky stiff, or IceFrog?)
- What will happen to apps that are currently signed? (For one thing, there are implications to keychain migration.)
- Will partial signing, so as to facilitate selective fiddling-around, be permitted?
- Can additional trusted roots and revocation lists be added?
- What about plugin loading? Will Gatekeeper load an unsigned plugin in a signed app? What about a self-signed plugin in a Developer ID app? Or a Mac Store App?
- What is the ultimate fate of the “run all code” option?
- How does Gatekeeper address code that can’t currently be signed (scripts of various flavors, lone binaries)?
And furthermore, at which point will Apple even revoke a developer certificate?
- Will Apple revoke the developer certificate of a developer like Unsanity, developing addons that use technical trickery to achieve a deeper level of customization?
- Are apps that Apple, for App Store purposes, consider enabling illegal acts — like Bittorrent clients — acceptable?
- Apps that include, or are tailored for, porn?
- What about other apps that are morally ambiguous?
- Will Apple revoke the developer certificate of a developer like Unsanity, developing addons that use technical trickery to achieve a deeper level of customization?
- Apps that are legal in the country of intended use, but illegal in the US?
- Apps that are legal in the US but illegal in the country of intended use?
- Apps that are legal in the US and legal in the country of intended use, but potentially illegal in other countries?
- Will Apple revoke a developer certificate at the request of governmental agencies?
- Will Apple revoke a developer certificate of software that is poorly maintained, severely instable (although not harmful in any way) and seldom updated?
Don’t get me wrong; I am happy that they have listened to the community and to common sense and are willing to offer at least one lasting alternative to the Mac App Store. I also understand that they are just getting out the gates. There are still important things to sort out, and the choices Apple makes will determine the future of the Mac platform and deeply impact those who use it going forward.
Rocky X.IIX
OS X Mountain Lion paves the pragmatic, useful middle path:
My favorite Mountain Lion feature, though, is one that hardly even has a visible interface. Apple is calling it “Gatekeeper”. It’s a system whereby developers can sign up for free-of-charge Apple developer IDs which they can then use to cryptographically sign their applications. If an app is found to be malware, Apple can revoke that developer’s certificate, rendering the app (along with any others from the same developer) inert on any Mac where it’s been installed. In effect, it offers all the security benefits of the App Store, except for the process of approving apps by Apple.
(As requested by Wil Shipley, who understood that long-term improvement for OS X users, developers and Apple does not hinge on Apple taking over markets but on OS X users knowing what they get.)
I also quite like what’s happening in Objective-C, and in text rendering in transparent layers.