Music Technology UNIX

AirPlay support for Logitech Squeezebox devices

On Friday 8th April, ShairPort was released. Containing the private key from a reverse-engineered Apple AirPort Express, this allows unlicensed/homebrew devices to act as AirPlay target speakers – e.g. allows iTunes, iPods, iPads, and iPhones to use them as an output device.

Immediately, the obvious thought is to add AirPlay support to Logitech/Slim Devices’ Squeezebox Server software so that the excellent Squeezebox devices can be used as remote speakers.

(As an aside, I’ve had my 3rd generation Squeezeboxsince they were introduced in 2005, and it is without the highest quality and most used gadget I have, still going strong and as useful as ever more than five years later!)

After a few false-starts trying to configure ALSA to record the digital output of the host’s soundcard, the latest release of ShairPort provides a perfect solution to lossless audio reproduction, without even needing a soundcard.


e-mail autoresponder using procmail

It may have taken way too many hours, and may have descended into a maze of twisty little passages, all alike, but after fighting various permissions issues and procmail‘s general intransigence (I still can’t work out what determines whether procmail will perform variable-interpolation on shell commands, or why it doesn’t like even multi-escaped square brackets in shell invocations…) here it is in all it’s glory: A procmail-based auto-reply system.

Apple Development

More fun with NSStrings in Objective C

Sometimes, it’s the simple things which can be the most handy. Here’s a quick category on NSString to allow all characters within a set ([cc lang=”objc” inline=”true” width=”0″ theme=”geshi”]NSCharacterSet *illegalCharacterSet[/cc] or [cc lang=”objc” inline=”true” width=”0″ theme=”geshi”]NSCharacterSet *symbolCharacterSet[/cc], say) to be easily and efficiently removed. This fills a gap in between the [cc lang=”objc” inline=”true” width=”0″ theme=”geshi”]stringByTrimmingCharactersInSet:[/cc] and [cc lang=”objc” inline=”true” width=”0″ theme=”geshi”]stringByReplacingCharactersInRange: withString:[/cc] & [cc lang=”objc” inline=”true” width=”0″ theme=”geshi”]stringByReplacingOccurrencesOfString: withString:[/cc] methods, which only act upon the ends of the receiver or require a continuous range or fixed string respectively.