Collin Allen:
I grew tired of Googling each time I needed the correct button sequence to put iPods into their various modes, so I’ve put together this little interactive display. Click on one of the three darkened buttons above to display the key presses necessary to put the iPod in the selected mode.
Bill Bumgarner says the lawsuit was stupid but the feature is not. I see where he’s coming from, because even with closed headphones I’ve had to turn the volume way up on planes, but in this case I think the solution is noise cancellation, which apparently no longer needs to cost as much as your iPod.
Mark Dominus (author of the excellent Higher Order Perl) now has a blog:
In a world full of bloated, grossly over-featurized software that still doesn’t do quite what you want, Blosxom is a spectacular counterexample. It’s a slim, compact piece of software that doesn’t do quite what you want—but because it is slim and compact, you can scratch your head over it for couple of minutes, take out the hammer and tongs, and get it adjusted the way you want.
Scott Lewis:
My main motivation for this is that stateless servers are far, far easier to write and the client-side code is going to have to know the state anyway. So why not push the state all the way out to the client. Or, as we used to say: push the processing to the edge of the network. But I’m sure that sort of phrase is ‘Web 2.0’-ish enough…
The new version of my favorite FTP-and-more app consolidates lots of commands into a single New Connection window. The columns and Automator-style groupings seem both logical and efficient to me. And, if you want, you can restore the old pop-up menus by dragging them into the toolbar. I think the Play and Stop buttons in the toolbar look out of place, though.
Scott Byer (via John Gruber):
Now, I’m an engineer, and I’m all for getting products out in front of customers so they can use their machines to their fullest as soon as possible, but there is just no way putting out a Universal Binary of Photoshop CS2 would make any sort of sense.
Don’t miss the comment from “Apple Engineer.”
Daniel Jalkut:
But the network domain is an awesome idea! So it looks like you get to be the network administrator. By setting it up correctly you gain a centralized share for all users of a LAN that benefits not only FastScripts, but any other application that correctly iterates the four domains for supporting files! For this reason, it’s worth knowing how to set up, and worth pressuring Apple to make the setup easier for everyday users. The remainder of this article details the steps you may take to both publish a shared “Library” folder from one computer and subscribe to it from any number of other computers on your LAN.
Bill Bumgarner:
AppleScript, on the other hand, continues to baffle me. All those english like sentences just confuse me. I constantly try to write code that is, well, like code and it doesn’t work.
Fortunately, there is appscript, a python module that makes any AppleScriptable application into something I can talk to just like any other Python object. This quite effectively reduces AppleScript programming to a programming exercise that my tiny little mind can effectively metabolize.
I find this is interesting because, while I don’t have trouble writing in AppleScript, there are cases where its syntax isn’t very efficient. Plus, it looks like appscript would be nice to use if you want to talk to an application and work with files or Cocoa from the same script. Like JavaScript OSA, though, it’s not as useful when you need to write scripts for other people to use.
Colin Faulkingham:
The Tech Crunch folks published a nice review of Amazon S3 grid storage. But they totaly [sic] missed what’s so cool about it. If you read beyond the standard features about price and storage you will find out why it’s really the killer app. Take a look at the developer documentation and have a look at the last section entitled “Using BitTorrent with S3“. That’s right Amazon S3 supports BitTorrent, it will create and seed your object(file).
Brent Simmons:
We already had the ability to sort subscriptions by name, unread count, last update. And NetNewsWire already knew some things about your behavior—for instance, it knows when you open an item’s web page. It wasn’t keeping track of things like posting to weblog or posting to del.icio.us, but it is now.
The sort will get better over time, since it’s only just started to track certain things—but even right off the bat I found the feature useful. I was a little surprised to see which feeds I really use the most and which I don’t.
Though message forwarding is fun, I disagree with most of AgentM’s take on Cocoa’s class clusters.
First, I don’t think that subclassing NSArray gives you “essentially zero functionality to start with”; rather, it gives you all of the derived methods, and you just have to implement the primitive ones. (The same is true if you subclass NSMutableArray.) Why use NSProxy to forward the derived methods to a regular array instance variable, when the abstract array class is already designed to do that for you?
Second, I don’t think that the examples given—a “message in a server-client protocol,” a queue, and mutable array that constrains the type of its elements, etc.—are good candidates for subclasses. The message example sounds more like has-a than is-a. And the same for a queue—why inherit all those methods only to make all but push and pop illegal (without much help from the compiler)? Lastly, a type-checking array would violate the substitution principle, so you couldn’t reliably pass it to an API that expects a regular mutable array. One tip-off that this is a troublesome design is that equality between the typed array and the stock one won’t be symmetric. It’s kind of the same situation as NSString and NSAttributedString. If you think about it, there isn’t really a way to make that subclassing relation work—which is why NSAttributedString is a decorator, rather than a subclass.
AgentM contends that class clusters break “the basic object-oriented principle of inheritance,” since you never know which array subclass you’re going to get. My take is that the basic object-oriented principle is that messages—and what they promise to do—are what matter, not classes. Inheritance is useful to the extent that proper subclasses respond to a common set of messages and agree on what they mean. But it should be thought of primarily as a tool for design, rather than a mechanism of code reuse. If you find yourself wanting to
subclass an array or string and “add simple methods and instance variables particular to [your] situation,” I have to question whether that makes sense at a design level. Rather than a new kind of array, you probably want an object that contains an array of something.
An example of where subclassing makes sense is making a class that’s functionally identical to a standard array, but that has different implementation characteristics. For example, you might join two large immutable arrays using a subclass that doesn’t bother copying all the elements into new storage. Or implement a subarray using just a reference and a range. Or your subclass could use a database or a C array of primitive types as an optimized backing store. Not coincidentally, Apple’s class clusters make it easy to do this kind of subclassing.
The Cocoa frameworks are very well designed. There are a few warts—such as making file references NSStrings rather than a distinct type—but I don’t think that class clusters are one of them.
Cocoa NSArray Objective-C Programming
Rich Siegel:
Note that the MacBook Pro is almost exactly twice as fast as the PowerBook G4, despite being handicapped by one-fourth of the installed RAM and a nominally slower disk. However, the MacBook Pro is only slightly slower than the beefy dual-processor Power Mac G5.
John Siracusa:
If you want to browse through the list of widgets, your mouse has to travel all the way from one side of the screen to the other each time you change direction. Your target after each trip is a tiny 16-pixel-diameter circle.…The Dashboard widget picker is essentially a broken scroll bar. It’s a scroll bar without the scroll thumb, and with unidirectional arrows that overlap the content area placed on opposite ends of the container.
Tim Gaden interviewed me on his blog about Apple Mail.
Greg Bolsinga (via John Gruber):
I was the sole engineer on a product called Class Wrangler. I was really happy the first time I got a bug report on Class Wrangler. It was the first piece of software I had worked on that people actually used. In addition, they used it and they actually cared about how it worked! They cared so much that they took the time to file a bug report about the problem. I loved getting bug reports on Class Wrangler. I created the first pass of this product during my two week ‘trial period’. When I went to Texas from Chicago the first time, I stayed for 2 weeks in corporate housing (with a rental car) all paid for by Metrowerks. I would also get paid for the 2 weeks. If they decided they liked me, I’d be hired. Otherwise I’d go back to Chicago with my 2 weeks payment for my work. I knew that I could pass the test, but it was still one of the strangest hirings I’ve heard about.
Update (2007-12-31): The article has been moved here.
CodeWarrior History Mac Metrowerks Programming
John Siracusa:
Then I noticed a strange noise…a chirping sound. I chased down the source, I searched the net for solutions, and I eventually wrote about it here at Ars in March of 2004. The summary: the power supply in the revision 1 Power Mac G5 made chirping noises, and there was no hardware-based fix in sight.
So that’s why I’ve been hearing that noise.
Brent Simmons, on the pleasures of deleting code.
MSDN’s “Behind the Code” has a long video interview with language designer Anders Hejlsberg of Turbo Pascal, Delphi, and C# fame (via Lambda). The next interview will be with Jim “transaction” Gray.