Archive for May, 2005

Cocoalicious 1.0b35: Star Ratings & More

Monday, May 30th, 2005

I’m back in Denver for Memorial Day, but the weather is so lousy that no one in my family has been able to build up the motivation to do much besides sit around my parents’ house. Fortunately, I’ve at least been able to use the downtime to get a lot of work done on Cocoalicious. The changes in 1.0b35 are mostly UI-focused, and include the following:

  • Star Ratings: Cocoalicious now recognizes tags that consist entirely of repeated asterix characters as star ratings, and displays the ratings in the post table as graphic stars, à la iTunes. The ratings can also be manipulated directly by dragging in the rating column (again, just like iTunes). See the screenshot I uploaded to Flickr if you’re wondering what this looks like.
  • Sortable Table Columns: This has to be the all-time winner for most inexcusable unimplemented feature in Cocoalicious. Fortunately, it’s finally in.
  • “Type-to-Select” in Tag Table: Typing while the tag table has focus will now cause the first match for the letters typed to be automatically selected (à la Address Book). This extremely useful and timesaving feature is courtesy of Ken Ferry’s excellent KFTypeSelectTableView class.
  • Delay of API HTTP requests: The del.icio.us API docs stipulate that clients should never submit more than one request to the API per second, and since the star rating feature makes that scenario a lot more likely, my del.icio.us API access code will now check to see if a second has elapsed since the last API request, and delay the request if it hasn’t.
  • Assorted bug fixes: Including one for a crasher that could happen on reload.

I’d also like to preemptively say that I realize not everyone will use the ratings, and that some people will want to be able to hide the ratings column. I ran out of time to implement that in this release, but will work on it for the next one.

Update: Damn–it looks like Jonathan Deutsch has found a crasher in b35 that eluded me. Stand by for a fix.

Say Hello to Ridiculous Fish

Thursday, May 26th, 2005

If I’ve ever introduced you to my colleague and friend Peter Ammon, you’ll probably remember me describing him as “one of the smartest people I’ve ever met.” Evidently I’m not alone in thinking that, because he was recently awarded what many of us Cocoa devotees would consider a dream job: an engineering gig on Apple’s AppKit team.

Before Peter left my group for the big time, a lot of us were trying to get him to start a weblog so that his frequent, witty insights about things like the horrors of object oriented Perl (he vociferously renounced Perl once after we sat through a presentation about its OO facilities), the perversity of C++, or what exactly happens in Objective-C when you message nil, wouldn’t be wasted on our daily lunch conversation.

Peter liked the idea, but true to overachieving form, kept us all eagerly waiting while he set about perfecting a fancy (and previously unknown, as far as I know) CSS box corner rounding technique as part of his site design. Fortunately, he now seems to be ready to go, and has launched his weblog at ridiculousfish.com. Mac developers who have been around long enough to have suffered through the incomplete early Cocoa documentation will undoubtedly smile at his first post.

Only time will tell how much Peter will feel he can write about his work, but I for one think having a weblogger on the AppKit team could be a great thing. Whatever he ends up writing about, I’m sure it will be worth reading, so I encourage everyone to give Peter a warm welcome to the blogosphere.

A Musical Baton

Wednesday, May 18th, 2005

Normally I tend to scoff at those meme things where people ask you to fill out a little questionnaire on your weblog, but recently there’s been a strain going around that appears to be so virulent I was beginning to feel left out. Fortunately, Brent Simmons passed it to me, so I’m finally free to hold forth on my musical taste.

Here we go (apologies for the length–I feel like writing about music right now)…

Total volume of music files on my computer

30.54 GB.

This is actually deceptively low, since I used to only rip the songs I liked off CDs.

The last CD I bought

Waiting for the Sirens’ Call, by New Order.

As some of you might have guessed from my karaoke repertoire, I dearly, dearly love New Order. Their latest album certainly isn’t the best work they’ve ever done, but it has its moments–particularly the title track (produced by John Leckie, the man behind The Stone Roses’ seminal eponymous album, and featuring a guitar tone I would kill to replicate) and “Turn” (an emotional ballad I could easily hear Morrissey warbling).

Song playing right now

At the moment I read Brent’s post, I had just finished walking up Haight Street while listening to …And You Will Know Us by the Trail of Dead’s album Worlds Apart. The particular song was, I believe, “Worlds Apart,” Trail of Dead’s manifesto-like screed about the sorry state of American culture. It’s one of the few songs I can think of that I would describe as “infectiously angry.” The sneering lyrics (”and the soccer moms and dads who raise brats on those TV ads, I know that they sleep at night”) roll along against such a catchy, upbeat musical backdrop that you can’t help but sneer right along.

Incidentally, if you ever get a chance to see Trail of Dead live, do it. I saw them once, before they were as big as they are now, at a little dive called the 15th Street Tavern in Denver. They had such a reputation for crazy behavior (they’ve been thrown out of towns in their native Texas before) that the small audience sat there on edge just waiting for them to throw something. Sure enough, my friend actually got hit by a drum stick! My brother Bobby just saw them in Denver, and during that performance they threw cake into the crowd (for the singer’s birthday) and invited everyone on stage to dance for the finale! You can bet I’ll be seeing them at The Fillmore later in the month!

Five songs I listen to a lot, or mean a lot to me

Here’s five songs I’m really into these days:

The Perfect Kiss,” New Order
During their gloomy 1980s heyday, New Order was once described as “the world’s bleakest disco act,” and songs like this, from their 1985 album Low-Life, show why. The listener’s initial perception of the track as an upbeat dance number is quickly challenged by lyrics (”pretending not to see his gun, I said let’s go out and have some fun”) that hint darkly at a friend’s (Ian Curtis’?) contemplation of suicide, and it finally dissipates completely during the song’s stormy climax.

This song may sound like a rather melancholy selection on my part, but as someone who periodically struggles with bouts of depression, I can tell you this song resonates with me to deeply. What I respond to about it (and the entire Low Life album really) is that it recognizes the sadness and alienation that so many people feel, while never quite giving up hope that love can conquer all. Plus, it’s got some really cool percussion at the end.

Pacific Theme,” Broken Social Scene
This instrumental, which sounds to me like New Order jamming with the Fairport Convention on a Burt Bacharach composition, fairly screams California to me. I love listening to it while driving to work on one of America’s greatest highways, Interstate 280 (try turning down the volume and listen to this song while watching this movie, and you’ll get a sense of the experience). It should make a wonderful soundtrack for my drive down to LA next month.

Quattro (World Drifts In),” Calexico
I’m a real sucker for atmosphere, and this song has it in spades. It perfectly captures the feel of the twilight hours of the day, and I love to play it while taking sunset walks through the trees at Buena Vista Park.

Gold in the Air of Summer,” Kings of Convenience
Perhaps I’m showing my age, but I’m increasingly finding the JAMC-loving rocker in me developing a taste for the kind of acoustic folk my parents used to enjoy. This is quite simply a beautiful song, full of poignant remembrance of things past and a hint of regret, all distilled through a simple description of a house. It’s amazing how music can add so much emotional punch to such simple words.

Secret Meeting,” The National
I’m a person who constantly has to fight a tendency toward shy introversion, so I really love singer Matt Berninger’s haggard-sounding apology in the opening track on The National’s wonderful new album: “I’m sorry I missed you–I had a secret meeting in the basement of my brain.” The manic, chant-like background vocals under the chorus parts also make for rather an interesting rhythmic dynamic that I quite enjoy.

Five people to whom I’m passing this baton (sorry guys):

(Update: I listened to a playlist containing all of the songs mentioned in this post on the way to work today, and liked it so much that I decided to publish it as an iMix.)

Cocoalicious 1.0b34: Bug Fixes

Sunday, May 15th, 2005

Since I’ve been on a coding roll lately, I decided to fix several Cocoalicious bugs this morning, and consequently am releasing b34 right on the heels of b33. Beta 34 fixes the full text search sorting regression I mentioned in the previous post, as well as a timing-dependent extended search bug, and a long-standing issue with the submission of posts containing plus signs or semicolons.

Cocoalicious 1.0b33: The “Async-ification” Release

Sunday, May 15th, 2005

It’s been a very long time (a few months, if I remember correctly) since I released a new Cocoalicious beta, but I think fans and critics alike will agree that Beta 33 was well worth the wait. I’ve been using builds of it for weeks now and I can’t get over just how significantly the changes I’ve made have improved the user experience. What are these wonderful changes you ask? Well, I’m thrilled to report that the internals of b33 have been significantly overhauled to minimize interaction with the del.icio.us API, and make all interaction with the del.icio.us server asynchronous.

You see, previous versions of Cocoalicious were heavily dependent on the del.icio.us API. Rather than maintaining its own post and tag lists, Cocoalicious always simply asked the del.icio.us server for updated data. This meant that the updated post and tag lists had to be re-downloaded every time a new post was added, or an existing post was modified. Constantly re-downloading the XML list of a user’s post gets to be pretty painful–particularly once the user has 1000+ posts and a 328 Kb XML download (as I do)!

Another major way the old Cocoalicious sucked was that, with the exception of the XML post list download, all of its HTTP requests were done synchronously. This meant that when the user posted a new link, deleted a link, tagged a link by dragging it to the tag list, or renamed a tag, the call to the del.icio.us API was done on the main thread. This blocked the UI (and brought up the dreaded spinning color wheel) until the del.icio.us server responded. Believe me: the lousy user experience this provided, as well as the irony of a “rich desktop client” that was less asynchronous and responsive than some of the new “Ajax” web apps, was not lost on me.

Fortunately, I put in a lot of work to fix these problems, and I think the experience of using Cocoalicious is improved massively by it. In b33, Cocoalicious does most of the work it used to rely on del.icio.us for internally. Cocoalicious now constructs and maintains its own tag list based on the current tags used in posts. When the user posts a new link, Cocoalicious simply adds it to its in-memory list, rather than re-downloading the entire post list every time. All of the server API requests necessary to relay these changes to del.icio.us are done in the background. The net effect is that Cocoalicious now truly feels as responsive as a desktop client should.

These are also important changes in that they pave the way for one of my biggest goals for Cocoalicious: implementing local persistence. The changes in b33 put Cocoalicious on the road to being an independent app that happens to sync with del.icio.us, rather than simply a rich front-end for it.

The only problem with this “async-ification” is that there is now no UI feedback to let the user know when (or if) the submission of a change to del.icio.us completes. I have some interesting ideas about how to address that I will try to post for critique and then implement in a future release.

In the meantime, enjoy the asychronicity! I know I have for the past few weeks.

(Update: Damn, I already noticed a regression: the post list is now unsorted when filtered by a full-text search. I guess b34 will probably involve fixing that…)

May 2005: There Will Come Soft TiVos

Tuesday, May 3rd, 2005

Recently, after months of trying, I finally managed to get the TiVo box I bought during last year’s “Great TiVo Giveaway” set up and working with my home wireless network. It was quite a chore, but the whole time I was trying to work around TiVo’s senseless omission of an ethernet port (Why USB and no ethernet, by the way? It boggles the mind!), I was at least encouraged by visions of all the wonderful television I was going to be enjoying once I got my hands on a landline.

Now that my TiVo is plugging away, though, I’ve been kind of disappointed to find that it hasn’t changed my TV watching habits at all. Sure, I can now see “The Daily Show” or “South Park” or “The Office” pretty much any time I want, but now that I have that ability I never quite seem to be in the mood. In fact, I’ve gotten so blasé toward TiVo that I rarely even check to see what it’s got for me, and it pains me a bit every time I walk past and see it earnestly recording something it thinks I will like but will almost certainly never watch.

Today I realized why I find this scene so oddly poignant: I’ve seen it before, at the end of Ray Bradbury’s Martian Chronicles. I suppose I should be happy, then: in the event that humanity is wiped out, at least something will remember how much I liked “Curb Your Enthusiasm.”