Archive for the 'This blog' Category

Back again

Saturday, August 6th, 2016

Sorry for the long period of downtime. It was caused by two things:

  • My previous host, Kaizen Garden, apparently went poof with no warning. (That was why the whole website was down for awhile.)
  • I got most of the site back up on its new home,, but got frustrated when I tried to restore the blog, so I just left it renamed out of sight until I next felt like making a run at it.

That was today. I finally sat down and got it all working, and fully upgraded WordPress while I was at it. The blog is back, everyone! Yay!

You will see some missing images. Apparently the backups I had only covered the WordPress database, not anything I’d uploaded as an attachment—those I only have through 2008. Oops.

Some of them I’ll be able to reconstruct. Fortunately I had good alt text on at least some of them, so I should be able to figure out what was there, and you should be able to make do in the meantime. And some of the images are definitely higher priority than others—the trigonometry figures, for example, will be among the first to come back.

So, please bear with me—the long recovery of this blog isn’t quite done yet. But this is progress.


Saturday, October 25th, 2014

The blog’s back up. It’s been down most of the year, as rather a lot of you noticed.

Thank you, everyone who told me. Every time you told me my blog was down, you were also telling me that you missed it, or at least you needed it for something. You’re part of why I kept meaning to bring it back, and why I eventually did.

I work for Apple now.

I’m on the Foundation and Core Foundation team, which is part of Cocoa. Part of my job is reading the Radars you file about those two frameworks and making sure they go to the right people.

I live in San Francisco now.

I moved early in the year, not long after I had to change hosting providers after TextDrive breathed its last (that was why the blog went down in the first place) and shortly before I started at my job.

I moved for the job; I work in Infinite Loop.

(I also moved because I love San Francisco. I’ve been here a couple of times before, and fell in love with it when I first stepped out of Civic Center BART onto Market Street.)

I probably won’t write as much here anymore.

A big part of that is time constraints: Subtract the job, the commute, three square meals, and sleep, and I don’t have a lot of time in a day to pound out a blog post.

Then, of course, there’s the nature of the job: Being at Apple means I know some things that aren’t public. Not a lot, but enough. Better to be careful than accidentally say something here that I’m not supposed to.

The same goes for my being active on Stack Overflow.

You’re welcome to ask a question and send me the link, but somebody else will probably get to it before I will.

And, of course, MacTech. See above. (If you have a subscription, you might have noticed this already—my last article ran in August, I think.)

I won’t be at MacTech Conference this year, either. This is the first time in the conference’s history that I won’t be at it. But plenty of other fine folks will who are worth listening to and who are good company.

That’s all I have to say for now. For those of you who use Twitter, I’m still there.

Until next time.

Blog posts vs. web pages

Monday, January 25th, 2010

Steve Smith says “Stop Blogging”:

I mean it. All of you people are writing fantastic, useful articles about code, methods, and technologies, but you’re putting them in blog posts — a date-based format that encourages us to leave things as they were, historically.

This got me to thinking about the difference between two of the tutorials I’ve published.

The pointers tutorial is a single web page. There’s a date stamp, but it’s way down at the bottom. The ASL series is nine blog posts.

In the three years since the previous version of the pointers tutorial, dozens of people emailed me to tell me about its major errors.

In the two years since I published the last of the ASL series (ignoring approximately a week afterward), nobody has told me of an inaccuracy in any of the posts.

There are a number of possible explanations for the ASL series receiving fewer (that is, no) corrections:

  • That its audience is narrower: Anyone who programs C has to deal with pointers. Only a very few Mac OS X programmers will ever touch ASL.
  • That it is less visible: One of these is linked from my home page and plenty of CS course reading lists (exhibits A, B, C, and D), and was linked for a while from the Wikipedia article on the C programming language; the other is practically unknown to anyone who wasn’t subscribed to my blog at the time.
  • That I’m just that good. (Ha!)
  • That ASL hasn’t changed at all since Leopard. (Ha!)

Smith writes from the perspective of the author and publisher, who must maintain a web page; he says that the author and publisher finds no (or not much of) such obligation for a blog post. I think the difference in my supply of corrections hints at a reader side to this, although, as shown above, my two examples are hardly comparable.

I have been meaning to move the ASL tutorial into a pointers-style web page at some point, although I don’t know when. I may start receiving corrections then, which means I’ll have to spend time to fix them. The flip side to that is that if I leave it as blog posts, I’ll have that time for other things, but the posts will be consigned to periodically-increasing inaccuracy.

I expect to think more about Smith’s suggestion.

There’s also the merit of the word “blog”, which is wearing thin for me.

Here, have a coupon

Sunday, July 26th, 2009

Voices That Matter: iPhone Developers Conference
October 17th and 18th.

This October 17th and 18th, there’s a conference for iPhone developers in Boston, which the organizers asked me to attend.

The conference is called Voices That Matter: iPhone Developers Conference, and the titular voices include Aaron Hillegass (famous for his book), Erica Sadun (famous and infamous for her jailbreak work and advocacy), Bill Dudney (famous for his book), Stephen Kochan (somewhat famous for his book), Jonathan “Wolf” Rentzsch, Fraser Speirs, and Daniel Jalkut.

As most of you know, I’m not an iPhone developer—I write for the Mac only. So I declined that part of the offer.

The other part was a coupon for you, my readers. I know many of you probably are iPhone developers, so I asked whether they would still like me to give you that coupon code. They agreed, so here it is:


(Those of you who read Jesper’s weblog may recognize it.)

Without the coupon, the registration fee is $495 until September 12th, $695 thereafter. The Word document they sent me says that that the coupon will knock $100 off.

Enjoy the conference!

The Best of Domain of the Bored

Saturday, November 29th, 2008

This morning, I went through my old posts and tagged some of them as “bestof”. With a little query-variable magic, I was able to create an Atom feed containing several random best-of posts.


You may want to check out that feed and see what posts you might have missed the first time I published them.

Framework Friday postponed

Wednesday, November 26th, 2008

The framework I picked turned out to be buggier than usual. Filing those bugs, plus some other things I have on my plate, means I won’t get done anytime close to last Friday.

So, last week’s Framework Friday post will appear on the next Framework Friday instead.


What I want: A “best of” plug-in

Sunday, May 18th, 2008

I want a plug-in for WordPress that will do two, or maybe three, things:

  1. Put a “flag as best of” button on any post that I’ve authored. (I would have to be logged in.)
  2. Provide a function to insert a div containing n=10 random best-of posts. I could then call this function from the sidebar.
  3. (Optional) Provide a single public page containing a link to every best-of post.

Does a plug-in like this exist already? If not, I’m not afraid to write it.

Blog spam count: 2008-04

Thursday, May 1st, 2008

Spam comments blocked by Negative Turing Test in April 2008:


Blog spam count: 2007-11 through 2008-03

Tuesday, April 1st, 2008

Average number of spam comments blocked by Negative Turing Test in per month from the start of November 2007 through the end of March 2008:


Total number of spam comments blocked by Negative Turing Test in the same time period:


Note that this is only on my blog, not any other blogs that use NTT.

“Photoshop sucks” updated

Sunday, March 23rd, 2008

Upon inspiration by a comment, I’ve just updated my rant from a couple years ago, “Photoshop sucks”, to include a list of alternatives. Topping the list, of course, is Acorn; also included are Core Image Fun House, Pixelmator, DrawIt, and Iris.

I’m very glad that there are now solutions to the problem that is Photoshop. I dislike bitching about something without a solution to offer; now I have six to offer, so that rant is now complete.

Just a quick note

Saturday, January 19th, 2008

If any of you were wondering how to share my entire ASL series of posts with people (e.g., via, I’ve added a list of links to the posts to my announcement post from earlier.

It doesn’t actually have any links yet, of course. I’ll be adding the links as I publish the posts.

Next week: Apple System Logger

Saturday, January 19th, 2008

In Mac OS X 10.4, Apple introduced a new logging system called Apple System Logger. ASL is comprised of three parts:

  • A logging API with all the capabilities of syslog(3) and more. You may think of it as the Quartz or QuickDraw GX to syslog’s QuickDraw.
  • syslogd. Apple’s implementation is modular; on Mac OS X, it includes (among many other modules, well-documented in Mac OS X Internals) an input for communication with ASL clients (i.e., your app) and an output that reads and writes the ASL database. (Minor note: Tiger uses a log file instead of a database.)
  • A front-end command-line tool, confusingly named syslog(1), even though it uses the ASL API rather than syslog(3).

The implementations of all three parts are open-source. The logging API is part of Libc, and syslogd and the command-line utility are the two halves of the syslog project. (In case you’re wondering: Those exist in Tiger’s Libc and Tiger’s syslog as well.)

The API is declared with plenty of comments in /usr/include/asl.h, and documented* in a manpage, though neither of those is exactly an exhaustive treatment of the API.

So, over the next Beatles’ week, I’m going to run a series of posts about ASL. I plan to give you:

  • A tutorial on using the ASL API
  • Bits of code and suggestions that go beyond the documentation
  • Three of my test apps, which are general enough that someone should be able to use them for purposes other than simply pounding on the API

Stay tuned!

(Also, this is post #601 in WordPress’ DB. Woo!)

Posts in this series

* While I was in Cupertino, I told Blake that it’s undocumented, but after I got home, I found the manpage. It exists in both Tiger and Leopard. Oops. Sorry, Blake.

Blog spam count: 2007-10

Tuesday, December 4th, 2007

Spam comments blocked by Negative Turing Test in October 2007 (and November 1–3):


Negative Turing Test fixes are done

Tuesday, October 16th, 2007

I’ve finished fixing number 12. Now, when you forget to answer the Turing test, your response will reappear in the comment form when the post loads.

For those of you who run Negative Turing Test on your own blag: WordPress has a bug as of both 2.1 and 2.3. Normally, when you submit a comment, WordPress sets three cookies that it uses to automatically fill in the Name, Email, and URL fields on the commenter’s future visits. When a plug-in like NTT deletes the comment, WordPress fails to notice and empties out the cookies. The result is that, when NTT deletes the comment, the name, email, and URL fields come back empty. (This is true with or without the fix for number 12.)

There’s nothing NTT can do about that—it’s a WordPress bug that I discovered in testing the fix for number 12. I isolated the problem and have already fixed it here, and I’ll soon submit a patch to the WordPress developers so that you can all have this fix as well. Until they accept it, here’s the patch for WordPress 2.3.

Blog spam count: 2007-09

Monday, October 1st, 2007

Spam comments blocked by Negative Turing Test in September 2007 (excluding September 1–3):


A note about your WordPress blog’s tagline

Tuesday, September 11th, 2007

On the general options pane, there is a field labeled “Tagline”:

Tagline: cd prh && dd if=brain of=blog

The value shown in that field is WRONG WRONG WRONG!

You see, that’s actually supposed to be HTML—or at least, such is the implication of the Atom template’s use of bloginfo_rss to get the description. The difference between {get_,}bloginfo_rss and {get_,}bloginfo is that the _rss versions call strip_tags to take out any HTML and escape any non-HTML characters, such as &.

That wouldn’t be so bad if strip_tags worked properly, but it doesn’t—not on this host, at least. It leaves the second & in the above example unescaped. (“OK, I escaped that one. It must be the only one. I’m off to Subway!”)

As if that wasn’t bad enough, WordPress doesn’t escape the tagline field’s value when putting it back into the field the next time you load up the Options pane. (It does if it’s plain text, but not if it’s HTML. Go figure.) So if you click “Update Options” again, your HTML goes bye-bye. You need to remember to re-escape it every time you save the General Options.

(Given that, maybe it’s not supposed to be HTML after all, and the use of bloginfo_rss in the Atom 0.3 template is a bug.)

Want to know how I found this out? Because the RSS reader in Safari 2 (I don’t use 3) was critically failing on the Atom feed. It was slurring posts together once it saw that an ampersand was not escaped.

Relevant versions:

  • WordPress 2.1.3
  • PHP 5.1.4 or so (I have no idea what version is actually running the blogs)
  • Safari 2.0.4/419.3

Blog spam count: 2007-08

Monday, September 3rd, 2007

Sorry I’m late with this. Here we go.

Spam comments blocked by Negative Turing Test in August 2007 (and September 1–3):


Looks like last month’s lull was temporary. They’re ramping back up.

Blog spam count: 2007-07

Wednesday, August 1st, 2007

Spam comments blocked by Negative Turing Test in July 2007:


I wonder what caused the drop. (Not that I’m complaining!)

Blog spam count: 2007-06

Sunday, July 1st, 2007

Spam comments blocked by Negative Turing Test in June 2007:


People I’ve met at WWDC

Thursday, June 14th, 2007

This is a partial list until Friday night, but it’s worth posting now because of all the people I met at the WWDC Bash.

Where possible, I’ve also listed their IRC nickname.

Adium-related people I met at WWDC

Other people I met at WWDC

  • Karl Adam (PantherMachina)
  • Dave Batton [Added Friday, though I met him before the Keynote]
  • Ken Ferry (kongtomorrow)
  • Andy Kim [Added Friday]
  • Paul Kim (mr_noodle) [Added Friday, though I met him after the Keynote]
  • Devin Lane (DevG5)
  • Gus Mueller (ccgus) [Added Friday]
  • Scott Stevenson [Added Friday; I’d met him previously at CocoaHeads]
  • Many Adium fans (thanks for your kind words, everyone!)

Bloggers I met at the WWDC Bash

Bloggers I met at CocoaHeads

The audience was SRO, so David and I (along with Devin and Michael Gorbach) just went off to The Studio and hacked code. After the meeting, I went up to Scott, and we shook hands and that was it. My guess is that it was a busy night and he wanted sleep.

People I’ve seen at WWDC, but did not talk to

People I saw at the WWDC Bash, but did not talk to

  • john calhoun
  • Martin Ott (I think he saw my Adium shirt and said “look, Adium!”, but it could just be wishful hearing, considering Ozomatli was blaring at the time)
  • Some other people I’m totally blanking on