The Holidays… Already?

My 7 loyal readers may remember that the holidays are not my favorite time of year. It’s not that I dislike, or hold any malice against, Christmas, Thanksgiving, Hanuka, or Kwanza, but rather I would just like to consider myself a little too pragmatic. It’s just another day in one of twelve months, and just because Constantine decided to expand the reach of Christianity by overtaking Saturnalia doesn’t mean we have to propogate the change. Of course, it’s not quite that simple. The idea that we should take time to consider our place in society at large and the adage “it’s better to give that receive” are both ideas worthy of anyone’s time.

The fact is that for the most part, I do like Christmas. I like giving gifts that I think people will like or enjoy. I like the look on my sister Amy’s face when she opens the hat, gloves or scarf I picked out for her and I know she’ll brag “my big brother gave me that” when asked. Ditto for Amber. What I don’t like it the commericialization of the holiday. That may sound weird coming from someone who is closer to atheism than anything spiritually, but it’s true: a holiday celebrating family, friends and love would get my vote. A holiday with a three month commercial ramp up, well, sort of leaves me cold.

That’s not to say I don’t like things. I do. Really. The fact that Garrett and I can make an impulse purchase of a plasma television proves that. But I don’t like the feeling that getting me a gift is an obligation. Seriously, if you have to ask what I want, why bother? Why not find me something that makes you think of me?

All of the above is a really long-winded lead in to the fact that this year, Garrett and I have decided to do Christmas differently. And like a true geek, “differently” means there’s a web application involved. We’re still going to buy gifts for everyone, but we’re asking those who would normally buy us things to instead help us provide Christmas for two “needy” families in the Fort Wayne area. We’ve sent letters to this effect to our family members, and I even hacked together a registry of sorts where people can let us know what they’re getting “our” families, so we know what needs to be filled in.

It’ll be interesting to see how my family responds; they tend to take the exchange of dollar values very seriously, and when we announced our intentions at dinner a few weeks ago, we were greeted by complete silence.

If you should, for some reason, want to participate in our Christmas exercise, go ahead, select a gift from the list . I’ll email you shipping information, and our families (AA-1 and S-10) will appreciate it, I know. Happy holidays. Already.

date:2004-10-31 15:25:19
category:my life


NPR’s Talk of the Nation featured an interview this afternoon with WIRED editor-in-chief Chris Anderson and Le Tigre’s Kathleen Hanna, discussing the WIRED CD. My favorite quote was from Kathleen, when asked what she thought of giving music away, she responded:

“We give a lot of stuff away for free anyway, so it’s nice to be asked.”

You can listen to the segment here.

date:2004-10-27 16:15:18
category:culture, geek

Creative Commons support in Gnome

After reading about the new Nautilus-Python bindings, I decided I had to try my hand. And what better feature to enable than everyone’s favorite, Creative Commons License support. Lately I’ve been working on updates to our embedded license tools which allow users to tag an MP3 with a CC license and then provide a web page which “verifies” the license claim.

The new tool, as of yet unnamed (suggestions?) adds a Creative Commons tab to the file properties of any MP3 file. For example, a track from Copy Me/Remix Me :

As you can see, the property page displays the license claim, and then verifies it against the web page. If the verification page didn’t exist, or didn’t match properly, you’d see an error message instead.

Now, I know what you’re thinking: “cool! how do I get in on the action?” It’s simple. Or at least straight-forward. You see, this bit of integration is made possible by some Nautilus code that’s not in the latest release, but never fear; I’ve provided a source tarball and I think it’ll work with Nautilus 2.4 and later (for sure 2.6 and later).

There are two packages you’ll need, and both are available at the CC Tools Sourceforge Project. First, nautilus-python provides the actual Python bindings for Nautilus. Simply untar it, and do the configure/make/make install dance. This will install the Nautilus support and install some example Python extensions. The default installation location is under your Nautilus library path; on my system it’s /usr/lib/nautilus/extensions-1.0/python.

The second package, nautilus-cc , provides the extension and all of it’s dependencies. Simply untar it in the nautilus-python directory (/usr/lib/nautilus/extensions-1.0/python on my system). Restart Nautilus and right click on an MP3 to try it out.

There’s definitely room for improvement in the tool, from simple UI polish to further integration. For example, what about a context-menu option which lets you license your file and publish it to the Internet Archive via ccTag, all integrated with the desktop. I’m sure there are other ideas out there as well. Leave a comment with a cool idea on this post; my favorite will get a CC t-shirt (so yes, you need to leave your email address and you implicitly give permission for CC to implement your idea; oh, and it’s my blog, so it’s my decision; but I really want to give away a t-shirt).

The cool thing about this integration is not necessarily the license display. I mean, that’s cool, but not necessarily the coolest thing. The coolest thing is that it took me longer to figure out the GTK code than it did to write the license parsing code. That’s because I’m reusing lots of code from previous projects. This further emphasizes the importance of packaging our code in ways that encourage reuse; we should be able to say “Hey, you developer there! Wanna integrate CC in your app? Here’s a library that makes it painless!” And yes, that’s a project I’ll be tackling in the coming weeks for CC.

date:2004-10-27 10:59:11

Closures Explained

Closures have been tossed about for a while now as the test of coolness for an interpreted language. Frankly, I’ve never understood exactly what they were, assuming that if I needed them, I’d figure it out. I only knew that Python’s support for them was limited to use of lambda constructs, which tend to be a little frightening (in my humble opinion).

Well Martin Fowler has posted a write-up on closures in Ruby, and along the way he actually explains what they are and why they’re cool in an understandable way. Ivan Moore has gone one further and translated the examples into Python. I actually came across Ivan’s translation first, and my initial thought after reading through the examples was “yeah, so what?” After reading Martin’s explanation of closures, though, there’s definitly something lost in the translation.

First, Martin provides both direct translations using lambda and “idiomatic” translations using list comprehensions. I think it should be pointed out that the idiomatic translations, while performing the same task, do not demonstrate the usefulness of closures. They may well demonstrate the usefulness of list comprehensions, but that’s a different animal all together.

The lambda-based direct translations retain the idea of passing code blocks, but seem to loose some of their conciseness. Maybe it’s just my aversion to lambda in general, but the Ruby syntax seems cleaner and more straightforward.

date:2004-10-26 06:58:16

I may be lazy, but…

You know, Matt’s right ; PayPal really is for the lazy. And while I’m a whole-hearted supporter of laziness and sloth in general, PayPal isn’t getting any more of my business.

The Washington Blade reports that PayPal is using their new “anti-porn” terms of service to terminate service to online publisher of gay-themed books, as well as an organization fighting AIDS through music and culture. Hardly hard core, if you ask me. Ignoring for a moment the question of whether or not PayPal should take a position on such an irrelevant issue, does anyone know of any “straight” businesses which have been dropped for such petty reasons? More coverage at QueerDay.

date:2004-10-22 14:47:19
category:my life, politics

Ten Years of OpenStep

Slashdot reports that today is the 10th anniversary of OpenStep, the NEXT/Sun API that now forms the basis of Apple’s Cocoa and GnuStep. Over the past couple of weeks I’ve poked around at Cocoa, XCode and Objective C, even breaking down and buying Aaron Hillegass’s book Cocoa Programming for Mac OS X. I’m actually quite impressed with Objective C and Apple’s developer tools. While Interface Builder was a bit of a mystery to me initially (“outlets? actions? what the fuck?”), reading the Cocoa tutorials on Apple’s developer site cleared up some of the confusion. But I’m not sold (what follows is my own opinion, and as such should be taken with a large crystaline solid composed of sodium chloride molecules).

Without a doubt, Cocoa is a truly object oriented programming environment that encourages well behaved programs in a much better way than Java ever has. Where Java encourages strong typing and object-orientation (except when it doesn’t; cough, primitives, cough), Objective-C (or more accurately, Objective-C along with Cocoa and Apple’s developer tools) encourages a model-view-controller (MVC) design pattern and works to minimize the amount of effort you as a programmer have to do to accomplish the task at hand. When I figured out just how outlets and actions work, it was the proverbial lightbulb; “you mean that’s it?” And PyObjC works just as advertised, seamlessly fusing this convenience with everyone’s favorite language, Python.

So why am I forcing myself to stay away from Objective C, XCode and Interface Builder? Portability. I’m paid to write software that runs on multiple platforms; at least Windows and Mac OS X. And I run Linux at home. The attractiveness of Python (and Java, I suppose) is its cross-platform nature. Writing a single code base that runs on 3 platforms equally well isn’t always easy, but I think it’s worth the effort in maintenance time saved. As much as I enjoy using Mac OS X, I don’t want to be enslaved to it. In fact, I recently installed Linux on my iBook, just for kicks. I might go back, but because I value portability, I have that option.

OpenStep and GNUStep do not ignore portability. The original Next toolkit was available for multiple platforms, and promoted the idea of fat binaries. Fat binaries were the precursor to today’s Mac OS X .app folders: a set directory structure containing compiled binaries for multiple platforms (and architectures). True write once, run anywhere. Unfortunately, Apple seems to have decided fat binaries needed a diet and only supports the “MacOS” target. This is actually an understandable position from a marketing perspective. Apple is a hardware vendor, and Mac OS X (and Cocoa along with it) are strategic advantages for their hardware. Allowing true fat binaries that ran on Windows, Mac OS X and Linux would undermine that advantage.

Today GNUStep is the best hope for reviving this portable vision. Their XML-based UI project, Renaissance, looks promising, and they have an “experimental” Windows distribution. Unfortunately the Windows binaries don’t include their developer tools such as GORM and Project Center, so it’s impossible to know just how well the UI really works on the Windows platform.

Increasing the number of cross-platform development tools, toolkits and languages is in everyone’s best interest. Eclipse has demonstrated the usefulness of cross-platform Java development tools and native-look widget toolkits. wxPython continues to lead the way on the Python platform. Increased competition not only gives developers more choices, it exposes different ways of thinking about problems and the solutions. And ultimately, the freedom to choose the correct solution platform for the problem is the developer’s “Freedom Zero.”

date:2004-10-19 11:04:45

Mmm, Delicious!

I’ve [STRIKEOUT:bitched about] commented on the inadequacies of “traditional” browser bookmarks several times in the past. This semester I have two classes meeting in computer labs, so my need for “distributed” bookmarks has increased exponentially. To that end I’ve been trying out, the “social bookmarks” site. is very cool, allowing you to store your bookmarks in a central location and assign them “tags” for organization. In addition to storing your own bookmarks (and tags), allows you to view what others are bookmarking, even setting up subscriptions of your friends (and enemies?), so their bookmarks are collected in one convenient spot.

Add to this basic infrastructure a completely logical URL structure, a REST API and RSS feeds, and you have a darn cool platform. There’s even a Firefox extension that’s supposed to integrate into Firefox, but so far it’s not that compelling; the bookmarklets supplies work just as well (if not better). So what would I like to see? A Firefox extension that replaced your traditional bookmark store with a backend. Or at least made look like a folder within your Firefox bookmarks. That would be integration I could totally dig: transparent, powerful and flexible.

On a somewhat related note, the community really needs a Mozilla/Firefox equivalent to Microsoft’s Internet Explorer Administration Kit (IEAK). Not only will the ability to customize an installation with default settings and extensions make deployment in large (or medium-sized) organizations easier, it would allow me to make a customized distribution for use at school, so I could get my extensions, settings, etc all in place with a single install. Mozilla has the Client Customization Kit (CCK) project, but it doesn’t seem to be, well, finished. At all. And it’s Win32 specific which seems like an anachronism for the Mozilla project. After all, we have installers for Linux and Win32, and we have official builds for Linux, Win32 and Mac OS X, so it doesn’t seem like a stretch to expect a customization kit to work on those platforms as well.

date:2004-10-18 07:11:37

Python 2.4 (Beta 1) Available

Beta 1 of the next version of everyone’s favorite language, Python, is now available. While most of the syntactic aren’t earth-shattering (for me), some of the module changes are. For example, the CJK Codecs package used in ccValidator are now part of the standard library, meaning one less external dependency to track. Strings have also gained an ‘rsplit’ method, meaning no more ‘astring.split()[-1]’, a hack I always had trouble defending.

Check out What’s New in 2.4 for all the details, or download here.

date:2004-10-17 11:07:19

QuickFile lives

Despite rumors of it’s demise, QuickFile lives on. QuickFile is an extension for Mozilla Thunderbird which enables message filing using only the keyboard interface. QuickFile 0.0.3 (release archive here is a maintenance release that adds support for Thunderbird 0.8 and the new extension update system shared by Thunderbird and Firefox.

So what’s next? Folder hot keys and “predictive” folder selection. Stay tuned.

date:2004-10-16 16:41:39

Peaches & Cream

Dogpoet (whom I have envied from afar for picking up and moving to NYC) makes an interesting comment about his new life in NYC.

In some ways it was a relief to finally admit this to myself, to stop pretending that my “new life” was one exciting thing after another, rather than admitting the truth; that my new life was an exhausting, overwhelming, homesick-inducing series of days and that, for as seldom as I left campus, I might as well be in Houston.

Some days I feel the same way about the changes going on in my life. Admittedly, leaving Canterbury to work for Creative Commons isn’t the change that moving from the west to east coasts is, but it was a big deal to me. And while I appreciate everyone who expresses how happy and excited they are for me, if I have to hear one more person say “You’re so lucky you get to work from home! Must be so tough!”

Look, I know you mean well, and I know you have no idea what you’re talking about. Yes, I love what I’m doing, and yes, in many ways I have my dream job. That doesn’t mean I don’t miss the social aspects of the office. It doesn’t mean that because I can work in my pajamas that I do, or that if I did I’d do any less work. And just because I work from home doesn’t mean life is perfect or that I don’t take my work seriously.

In short, just because someone makes a move to follow a dream doesn’t mean their life is peaches and cream.

date:2004-10-15 09:25:55
category:my life