Archive for August, 2005

Cocoalicious & NetNewsWire Screencast

Wednesday, August 17th, 2005

I just discovered through Technorati that Peter Rukavina posted a screencast explaining how to use Cocoalicious and NetNewsWire together. I’m always excited to see people doing stuff like that, since I think a lot of users are unfamiliar with the fancier things Cocoalicious can do (other examples include Services support, AppleScript-ability, Full Text Search, etc.), and I barely have time to work on the thing these days, let alone document it. If anybody else has put together useful how-to’s like Peter’s, let me know and I’ll link to them.

(Update: Peter’s site seems a bit slow right now, but hopefully that situation is only temporary.)

Replace Me

Wednesday, August 10th, 2005

Now that I’m leaving my position in Mac OS X Integration for a spot in Pro Apps, my team is going to have a job opening to replace me. This position is a great opportunity for a recent college graduate or less experienced person to get a foot in the door at Apple and work with a fantastic team (I’m not just saying that, by the way–they really are the finest group of people I’ve ever worked with) on an operating system that is used and admired by millions.

If you have good CS fundamentals, know your way around UNIX, have enthusiasm for making OS X the best it can be, and are creative and entrepreneurial, we would very much like to talk to you. Feel free to drop an email to “buzz” at this domain if you’re interested!

(Update: Please note that current geographic proximity to Cupertino is not necessarily a prerequisite here. We’re interested in hearing from qualified candidates wherever they may be.)

The Hidden World of HTTP

Monday, August 8th, 2005

One of the things I’m going to miss about working in Mac OS X Integration is having co-workers crazy and creative enough to actually write a spider to crawl the web in search of unusual (and often humorous) HTTP headers. As it happens, our own Andrew Wooster recently completed just such a survey, and the results are pretty amusing. My personal favorite excerpt from Andrew’s post is about the headers returned by the Democratic Party’s web server:

The Democrats called, they want you to know they found their sense of humor:

X-Dubya: You teach a child to read and he or her will be able to pass a literacy test.

Make sure to hit it a few times for optimum goodness:

X-Dubya: We’re in for a long struggle, and I think Texans understand that. And so do Americans.
X-Dubya: Africa is a nation that suffers from incredible disease.
X-Dubya: We’re making the right decisions to bring the solution to an end.
X-Dubya: Families is where our nation finds hope, where wings take dream.

See more over at Andrew’s site.

Meta Tags: The Poor Man’s RDF?

Friday, August 5th, 2005

I’ve always thought that what makes del.icio.us so successful despite a lot of recent competition is that it exemplifies the same kind of thinking Tim Berners-Lee described in his “Axioms of Web Architecture” as the “Principle of Least Power,” or what the designers of the Internet called “end-to-end architecture.” Instead of trying to build a powerful, heavyweight system that would anticipate a user’s every need, Joshua and company have been building an extremely simple, general service that can be endlessly adapted and easily plugged into other systems.

The variety of “meta” tagging schemes del.icio.us users have evolved is great evidence of this. Probably the best known example, the “for:” tag prefix, has actually become commonly enough used that Joshua and company have given it formal recognition within the system, but there are lots of other schemes in usage. I’m a frequent user of “cite:” (to attribute links I get from other people), for example, and now that I’ve been using the new del.icio.us media support to run an ad-hoc podcast, I’ve been exploring the use of “meta” tags for music metadata.

It was this last usage that led me to an epiphany. As I started tagging songs I posted with metadata like “artist:thenational” and “soundslike:afghanwhigs,” I realized that I was, in effect, creating triples and using tags as a sort of poor man’s RDF.

For those who aren’t familiar with RDF (which is probably almost everyone, since RDF is rarely explained well), it might be helpful to pause for a moment to explain the concept of triples. The first thing you need to understand is that RDF is an attempt to standardize the way we represent the relationships between data, just as XML standardizes the way we represent that data’s structure. Information in RDF is expressed as a series of statements that each have a subject, verb, and object–triples. For example: The National [subject] sounds like [verb] the Afghan Whigs [object].

A collection of these statements is referred to as a “triple store,” which can be understood as a sort of ad-hoc database. While traditional relational databases require that new properties be formally added to the model either by adding new columns to an existing table or by adding additional tables, adding a new property in RDF is as simple as asserting in a triple that value X is a certain property of entity Y.

So, then, a collection of del.icio.us links containing “meta” tags can be thought of as a triple store. “Interesting,” you may say, “but why should I care?” Which is a very reasonable question given RDF’s current track record of real-world usefulness.

Well, as it happens, my del.icio.us/triple store epiphany has given me an idea for a Cocoalicious feature (yes, I do plan to release a new version of Cocoalicious some day). It occurred to me that I could turn Cocoalicious into a sort of free-form database by treating “meta” tags as triples, compiling a list of the implicit properties contained in these triples, and allowing the user to add columns displaying the values of those properties for each post to the main table view (probably by way of a context menu like the one you get by right-clicking on the iTunes column headers). That way the user could implicitly add his or her own metadata the Cocoalicious model, which could be used to sort and query the post list.

I suppose this feature might be too esoteric to be useful to that many people, and it has some problems (for example, how do we handle the situation where a single post has two values for the same property) but the Cocoalicious project is all about experimentation, so I think I’m going to implement it anyway. Anybody have any interesting thoughts on the subject?

A New Gig

Tuesday, August 2nd, 2005

As many of you may have guessed based on my weblog post about interviewing, I’ve been in the market for a new job recently. My current gig with Software Update Integration (a branch of Mac OS X QA) at Apple has been a great experience, and I owe an enormous debt of gratitude to people like my boss, Dennis Gately and my colleagues Andrew Wooster and Peter Ammon, who moved me to California and gave me the biggest break of my life. In many ways, their willingness to take a chance on me has had a decisive impact on my life, and I have benefitted enormously from the time I’ve spent with them.

Even so, I came to Apple almost exactly two years ago with one goal in mind–to eventually do development work on a shipping Apple product–and I’ve never lost sight of that. Thus, while I’ve been working to ensure the quality of Mac OS X updates, I’ve also been looking around for an engineering position that would be a good fit for me. Today, I finally accepted an offer for what I think will be a fantastic opportunity: an engineering position on the Soundtrack Pro team.

I’m excited about this position for a number of reasons. First, it will be an opportunity to finally devote my full attention to what I consider to be my real interest and forté: Cocoa programming. Second, in the long-term it could give me exposure to some fascinating programming topics I’d be unlikely to encounter otherwise (e.g. real-time programming, signal processing, Core Audio, etc.). Third, it gives me an opportunity to reconnect with one of my earliest uses of computers (I’m fond of telling people that my first use of the Internet was to FTP guitar tablature from OLGA, and my favorite thing to do with my old Amiga 500 was to spend hours with my friends constructing primitive mashups using a crude, serial port-based sampler). And lastly, corny (and vaguely Marxist) as it may sound, it allows me to be a part of the ideology that, in my estimation, has always made Apple special as a company: the quest to democratize creativity by bringing powerful production tools to the masses.

Many thanks to Corey Peterson, Dan Schimpf, Jason Marr, and everyone else on the team for giving me the opportunity. I look forward to learning a lot from you and, as my colleague Jonathan Deutsch is fond of saying, exceeding your expectations.

Soundtrack Icon

Heavy Metal

Tuesday, August 2nd, 2005

It has not escaped me that both Macintosh applications I have released use the controversial metal window style, and, though I’ve been known to defend metal windows against charges of ugliness, I do occasionally find myself apologizing to people who think they’re getting out of hand. Every time I do, however, I remind myself that, unlike most indie developers out there, I at least understand the cardinal, unwritten rule of metal window design: for God’s sake, minimize the amount of visible metal!

Look at iTunes, iPhoto, iCal, NewsFire, Cocoalicious, or Delicious Library, and you’ll see this principle followed religiously. Compare this with the vast majority of metal indie apps out there (see, for example, Cinematics, which I’m not picking on–I just happen to have found it through Daniel Wilson’s del.icio.us links today), and you’ll see a different story. Notice the wide margins, all metal drawer, metal inset boxes, and the vast sea of metal at the bottom of the window? This kind of thing is what makes metal windows look heavy, and why they have a reputation for being ugly.

If you plan to develop a metal app, here’s my advice:

  • Use small window margins. Even smaller than the ones specified by Apple’s UI guidelines. Look at iTunes, iPhoto, or iCal for examples.
  • Use iTunes style bezels around table views and other boxes. AppKit doesn’t provide them out of the box, but the Cocoalicious project contains a class to draw them.
  • Try not to use a toolbar, but if you must, follow Adam Betts’ advice about using back shadow instead of floor shadow on your icons. Or, do what Cocoalicious does and use NSSegmentedControls on a very thin toolbar.
  • Try not to use a drawer, because metal drawers look icky. If you do, remember to follow the principle of minimizing the visible metal (see iCal and PodWorks).

Contrary to the common perception, metal apps need not be ugly, and I think that if more developers were to keep these principles in mind, they wouldn’t be.