I was recently interviewed by Blake Burris from CocoaRadio. If you haven’t heard about CocoaRadio before, be sure to check the archives for interesting interviews with other Mac developers. Thanks of course to Blake for taking time to do this.
I felt a need to clarify/augment a few things I said, nothing too big.
Number of people with commit access to the bundles repository: the actual number is 71 (I said around a hundred).
Release early, release often: The software update framework I mentioned was Sparkle by Andy Matuschak. TextMate doesn’t use it mainly because my own stuff predates the work of Andy. In addition to making it easy for your users to update, you should make it easy for yourself to release new versions. That means, write a script that takes care of everything related to pushing out a new build. That is, run the deployment build, package it, upload it to your server, and have it update the file/feed in which you link to latest version. I am using a makefile for this because it is easier to split up the process into various steps and re-run only one or some of the steps as necessary. You may want to create a test feed on your server for new versions, that way you can start by pushing the update to that feed, and after verification, to the actual (public) feed.
The full (boring) list of software I regularly use: Adium, Colloquy, Finder, GeekTool, iTunes, Mail, OmniWeb, Quicksilver, ReminderMate (something I wrote primarily to tell me when the tea is ready), Terminal, and TextMate. I have an EyeTV, so I also run their controller software.
Music I listen to: the genres I enjoy (while programming) are (in a nutshell) ambient/dark ambient/introspective, singer/songwriter, and trip-hop. I have a smart playlist which shows all music played within the last month, and it currently shows 2,265 items (7.8 days worth of unique music), so I wasn’t kidding when I said I have the stereo on 24/7. I have created an empty playlist in iTunes and set Party Shuffle to source that. That way, when the PS runs dry, it won’t start playing random tracks (I dislike listening to random music). I have the default action for music (in Quicksilver) be “Play in Party Shuffle”, so I can do: ⌘space, B, →, select artist, select album, and then return (↩). If something is already playing, I press ⇧A instead of return to have it do “Add to End of Party Shuffle”. I also have ⌘5 (on the numeric keypad) do pause/play in iTunes (⌘4 and ⌘6 are previous/next, and ⌃⌘0-5 are rate with 0-5 stars).
Generic programming: I mentioned that I am a fan of STL/generic programming. I haven’t seen any good written introductions to the topic. Part of the problem is that C++ syntax isn’t always the most user friendly, and generic programming is a paradigm, not a syntax thing, so it’s not easy to write a tutorial that grabs the reader and makes him think that this is it — it took me probably a year from adopting STL to really master it (and I learned new stuff throughout this period). There is a good interview with Alexander Stepanov.
Lack of Intel native Photoshop: I came off as accusing Adobe of being inefficient and not caring about their product (and that this was the general case for big companies). I feel this was too condescending. I do think that passion is easily lost in a big company, because when you reach a certain point, it’s more about marketing than the product, and when you reach a certain team size, you have people leave and join the team a lot, and no-one feels a real responsibility for the code, because no-one really wrote it, and too much of it was done by someone who is no longer there, and did a sub-optimal job, but no-one wants to spend their time fixing it. Of course I have no idea how things actually work at Adobe.
Number of licenses sold: I said I hoped to reach the five digits in a few months. I will actually sell license number 10,000 in roughly two weeks time. That makes for an average of 16 licenses sold every single day, since the initial 1.0 release in October 2004. That also means that when you write that “if you do X, I will buy a license”, you have a rather weak bargaining chip on your hand ;)
The things I hate (hate here means: “do not fanatically love”) about Cocoa: I was interrupted by Blake, so I only got to say the one thing, which was the retain/release system, which in itself is not bad, but it is when coupled with something like bindings, because retain cycles can easily occur, and they are sometimes very hard to avoid. A similar problem exists when you want a tree data structure where nodes have pointers to their parent, for easy removal, but here at least all connections are in the user code. The other thing I hate about Cocoa is the
first responderand cell system. I plan to write a longer entry (on my other blog) where I will go into detail. For the records: Cocoa is fantastic, and I could not have done a better job myself!
So that was it (I think), feel free to use the comments for anything you want clarified or follow-up questions. Just don’t ask when 2.0 will be ready ;)