Update (2009-01-05): More analysis of the bug and possible fixes.
Archive for December 2008
BBEdit 9.1 can exclude dictionary words from the completion list, and projects now store relative references to files.
I’ve bought apps for $5 and $10, and now many of those prices have either been cut in half or lowered to 99 cents. I felt like I got my money’s worth at the higher price, so I’m not complaining that I was ripped off. Instead, I just feel like a fool.…Apparently the way to buy iPhone software is just to wait a month for the price to drop.
Indeed. When apps I’ve bought go on sale, their icons get “Sale” badges in my iTunes Applications pane. I already feel somewhat like a fool for the apps that I wouldn’t have bought if there had been a trial available. Now there’s a way to reduce the satisfaction of having purchased an app that I do like.
Mark Jason Dominus’s excellent Higher Order Perl is now available for free in PDF and MOD formats. This is the kind of book I like to read on paper, though.
Update (2014-12-02): Mark Jason Dominus:
Would the book have made more money if it were not available as a free download? We can’t know for sure, but I don’t think so. The book has always sold well, and has made a significant amount of money for me and for Morgan Kaufmann. The amount I made is small compared to the amount of work I had to put in, just as Greenspun said, but it was nothing to sneeze at either. Even now, ten years later, it is still selling and I still get a royalty check every six months. For my book to have lasted ten years is extremely rare. Most computer books disappear without a trace after six months.
So my conclusion is, Greenspun’s advice was exactly correct. As an author, you owe it to yourself to make your book available to as many people as possible. And the publisher may agree, so be sure to ask.
From C++ to Objective-C (PDF) looks like a concise and useful book for experienced programmers who want to learn about Objective-C (via John Haugeland). Unlike the various paper books I’ve seen, it isn’t full of step-by-step example projects. Unlike Apple’s book, it has lots of comparisons with C++ and advice about common techniques. However, it could use some technical review. For example, page 25 cites Wil Shipley’s incorrect recommendation to avoid
self = [super init]. In fact, this idiom makes sense and is recommended by Apple.
Although at the start I paid only the most cursory attention to the Python 3.0 development process, every time I looked into it in any detail I was struck by the amount of time and thought which went into the changes which have been made to the language. There are, so far as I can tell, no frivolous “we just did this because we liked it” differences between Python 2.x and Python 3.x; every breaking change seems to have been discussed to death, justified based on real-world problems and even then carefully considered and reconsidered just to see if a backwards-compatible way could prevail. Python 3.0 came out of a years-long process of development by people who were simultaneously actually using Python and taking notes on how it could be better, and it shows.
Peter Hosey has some good examples of what to do and what not to do when modifying an array controller’s content.
Both Quay and Klicko do part of their seeming magic with a technology called “Quarz Event Taps” (PDF file). This was introduced in Tiger, and perfected in Leopard. Briefly, an event tap is a C callback routine that is called to filter low-level user input events at some points in the system's event processing, which is actually quite complex. Events can be generated, examined, modified or even suppressed before they're delivered to an application. Since user input events are usually routed to the foreground window (that is, to the foreground application, even if it has no window), this makes event taps quite powerful.
The December issue of ATPM is out:
- Mac About Town: What’s a Guy to Do?
- MacMuser: What a Scrubber
- Next Actions: Non-Typical Lists
- On a Clear Day, You Can See the Hollywood Sign: My Dad’s Got a Barn. Let’s Put on a Show!
- How To: Taming the Two-headed Monster: Using Two Monitors With Your Mac
- Desktop Pictures: Rocky Mountain National Forest
- Software Review: Art Text 2.0.2
- Accessory Review: Checkpoint Flyer (and Accessories)
- Software Review: ExpanDrive 1.3.1
- Book Review: Foundations of Mac OS X Leopard Security
- Software Review: GL Golf 2.1.8
- Hardware Review: iRecord Pro
- FAQ: Frequently Asked Questions
To work around these problems, AnchorFree chose to add to Hotspot Shield a VPN type that the iPhone has built in: L2TP, which stands for Layer 2 Tunneling Protocol over IPsec (Internet Protocol security). L2TP is an extremely strong method of creating a secure connection, and is one of three methods that the iPhone 2.0 Software and later support. (Alas, the iPhone can’t maintain a seamless VPN connection when you roam among Wi-Fi networks or between Wi-Fi and cell data networks; you have to disable and then re-enable the VPN connection for each network move.)
Indeed, just about the only thing that seems to help is to only have a single NSOperationQueue running at a time. Since you can’t prevent framework code from running its own NSOperationQueue, this is an untenable solution.
Update: His solution is RAOperationQueue.
…for a number of years I have toyed with the idea of getting a personalized plate with II11I11I or 0OO0OO00 or some such, on the theory that there is no possible drawback to having the least legible plate number permitted by law. (If you are reading this post in a font that renders 0 and O the same, take my word for it that 0OO0OO00 contains four letters and four digits.)