The Apache (Contributor’s) License Agreement Is Very Dangerous

EDIT: All of this applies to the regular Apache License (v2) as well, and any other licenses that use its language. I’ve contacted Apache on their legal list about this and am waiting to hear back. UPDATE 2 3: Apache’s last reply on September 15, 2013:  “In response to your request for a formal answer […]

Better Objective-C through Clojure Philosophy

EDIT June 2, 2014: The TERecord implementation described here is not how the current TERecord implementation works. I updated the README on GitHub to show how it currently works. Ever since discovering Lisp, I’ve felt an almost… loathing for other languages. They make things too complicated. You feel that other languages encourage code that ends […]

The Ultimate Test Machine Saga

So, you want to quad-boot your Mac? What could possibly go wrong? This post explores that question. Motivation After upgrading to the latest Unibody, I decided to turn my old MacBook Pro into the ultimate testing environment. My goal was to be able to test and develop software for Tiger, Leopard, Snow Leopard, Windows XP, […]

Dear Apple: The iPhone deserves better SDK terms

Outrage over this little clause in the new iPhone developer SDK terms is erupting all over the internet: 3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by […]

Easy Cocoa Setup Assistants with TESetupAssistant

Setup assistants can be a great tool when you need to guide users through a series of steps. TESetupAssistant was born during my work on the 2.0 update to Espionage, when I discovered that many of its UI elements could stand to benefit from a generic setup assistant class. The gallery below shows some of […]

How newLISP Took My Breath (And Syntax) Away

Translations: 中文 A few years ago, a little-known language called newLISP completely changed my understanding of what “good” programming languages look like. Why newLISP? Before saying another word, I’d like to address the question that some of my LISP-familiar readers may be asking right now: Why newLISP? Why not Clojure, Scheme, or Common LISP? The […]

Introducing Objective newLISP

newLISP is an awesome language that I use for all of my scripting needs, but one thing that is missing from it is a nice way of doing real object oriented programming. By default it supports a pseudo-OOP paradigm called FOOP, but FOOP is simply inadequate for doing some of the most rudimentary of OOP […]

Building a better lock: TESharedObject

While I’m happy to see Grand Central in Snow Leopard, I won’t be using it in any of our applications anytime soon because that means we’d have to turn our backs on all those PPC users out there, and everyone who has yet to upgrade to Snow Leopard. I suspect that this represents a sizable […]

Using Bazaar Like Git + ‘repoalias’ Plugin

Continuing my exploration of distributed version control systems, I decided to take a quick look at the Git: Managing Branches A single git repository can maintain multiple branches of development. To create a new branch named “experimental”, use: $ git branch experimental If you now run $ git branch you’ll get a list of all […]

Installing Bazaar 1.16 on OS X [Updated]

Recently I decided to bite the bullet and move away from Xcode’s Snapshots to using a DVCS. After checking out Git, Mercurial, and Bazaar I finally settled on the latter, for now at least. Bazaar is a great, it has excellent documentation on a very well designed website, it’s incredibly easy to use (one of […]