限りない音楽コレクション

From The Joel on Software Translation Project

Jump to: navigation, search

Joel Spolsky / 青木靖 訳
2006年11月9日木曜


12歳のとき私は毎週日曜の朝にKQEO放送でケイシー・ケーサムを聞き、新しい曲やリリース予定の曲をみんな書き出していた。それから毎週の5ドルのお小遣いをもらうと、まっすぐレコードショップに行って45回転レコードを買った。1枚1ドルだった。そのうち私のコレクションはかなりのものになり、全部でたぶん100枚くらいあったと思う。今では母にお願いだから捨ててくれと言われている。

大人になったときに自分のレコードコレクションが2,500,000曲にまで膨み、それを月10ドル以下でまかなえるなんて想像もしていなかった。この4年くらい私はRhapsody(かつてのListen.comで、現在はRealが保有している)のサービスを購読しているが、これはコンピュータで音楽を聴くとてもいいやり方だ。

しかしラップトップのスピーカーというのはひどいものだし、コンピュータに入っている音楽を家の別な部屋からでも聞ける方法を探していた。それで今年の1月ついにSonosのシステムを買うことにした。これは私がかつて買ったテクノロジー製品の中でたぶん一番クールなものだと思う。

これは混乱しやすい類のシステムなので——ステレオとコンピュータとWiFiネットワークの組み合わせでできている——どういう仕組みなのかちょっと説明しよう。

まずZonePlayerというのがあって、これを音楽を聴きたいそれぞれの部屋に1つずつ置く。ZonePlayerには2種類ある。大きい方はアンプを内蔵していて、スピーカーを直接つなぐことができる。小さい方にはアンプは付いていない。こちらは既存のステレオシステムのaux入力につなげて使う。

このZonePlayerは32個まで増やすことができる。私は3つ買った。1つはリビング、1つはキッチン、もう1つはバスルームに置いている。ZonePlayerの1つはコンピュータの近くに置き、イーサネットでネットワークに接続する。他のZonePlayerはWiFiを使って魔法のように互いを見つけ出すので、あなたは何もつなぎ合わせる必要はない。本当に魔法みたいだ。このシステムの設置や設定の容易さは驚くばかりだ。プリンタのインストールより10倍くらい簡単だ。Bluetoothを機能するようにさせるのに比べたら50倍くらい簡単だ。Sonosの開発者たちが、設置や設定がまったく簡単になるようにするために膨大な努力を払っていることは明らかだ。

次にハンドヘルドコントローラを1つ(あるいはもっと)手に入れる。これもまたWiFiを使っていて、システムの他の装置を自動的に見つけ出す。コントローラはすごくいいユーザインタフェースを持っている。iPodのようなサムホイールに、大きく明るいカラー液晶。加えて、あらゆる種類の見事なUIの工夫がなされている。たとえばコントローラを置いておくと、バッテリーを節約するために液晶が暗くなるが、再び手に取ると、モーションセンサにより画面がすぐに明るくなる。

最後に、コンピュータにコントローラソフトウェアをインストールする。WindowsでもMacでもいい。このデスクトップアプリケーションはだいたいにおいてハンドヘルドコントローラと同じように振る舞う。

あとは家にあるコントローラをどれでも手にとって、コントロールしたい部屋を指定し、自分の音楽コレクションをブラウズする。接続されたコンピュータに入っている音楽ファイルは何でも再生することができる。MP3にWMAにAACにOGG、そのほか。インターネットラジオを流すこともできる。私はこれを使ってシアトルのNPR局のAll Things Consideredをニューヨークの放送より3時間遅い時間に聴いている。iPodや古いレコードのターンテーブルや8トラックテーププレーヤを再生したければ、それをただZonePlayerのどれかにつなぎさえすればいい。

そして究極的にクールなのは、Rhapsody Unlimitedを購読していれば、Rhapsodyの2,500,000曲をブラウズし、家のどこにいても聞けるということだ。

だから今では私は家に呼んだ客が音楽を気に入らないという場合には、コントローラを渡すようにしている。そうすれば彼らは好きな曲を探してかわりにそれをかけることができる。

私がおしゃべりを止められないのはSonosがユーザインタフェースでやったいい仕事についてだ。これは本当のゼロコンフィギュレーションシステムで、すべてが本当に簡単だ。私はずっと以前にこんなことを書いた。「オプションを提供するときはいつも、あなたはユーザに判断することを求めているのだ。これは彼らが何かについて考え、それについて決断しなければならないことを意味する」。ユーザはWiFiネットワークがWEPを使うかWPAを使うかの決断なんかしたくはない。ユーザが決断したいと思っているのは、Baby, I Love Your Wayをビッグマウンテン版で聴くか、それともピーター・フランプトン版で聴くか、あるいはそのほかのRhapsodyが追加料金なしにオンラインで提供している10個のバージョンのどれで聴くかということだ(私のおすすめはMig Ayesaのやつだ)。


ギーク向けの話

私はSonosのソフトウェアエンジニアリングディレクターをしているニック・ミリントンに、彼らのソフトウェア開発環境についてちょっと聞いてみた。そしてコントローラとZonePlayerがLinuxで動いていることを知った。「私たちは標準的なLinuxカーネルからはじめました」と彼は教えてくれた。「それにオーディオとか、ボタンやスクロールホイールといったコントロールとか、ネットワークなんかのための独自のデバイスドライバを組込みました(後のやつはソースコードに厳格なアプリケーションハンガリアンを採用しています。Linuxカーネルモジュールとしてはたぶん最初じゃないかと思います)」。

ニックはさらにこんなことを話してくれた。「私たちのアプリケーションは基本的なネットワーク通信プロトコルスタックにC++で書かれた共通コードレイヤを使っています。コントローラのアプリケーションは、ZonePlayerがいくつあってどう接続されており、どの曲が再生されているか、といった情報を管理するデータモデルを共有しています。それからそれぞれのコントローラにプラットフォーム固有のUIレイヤがあります。CR100用のカスタムメイドのレイヤに、Windows用のWTLベースのWin32 UIレイヤ、それにMacintosh用のCocoa/Objective CのUIレイヤです。WTLとCocoaはどちらも私たちには役に立ってくれました。WTLはWindowsが実際にどう動いているのか隠して危険にさせることなく(開発者というのは自動操縦なしで飛ぶ方法を忘れがちなものです)、生の素材を直接プログラミングする骨折り仕事の多くを取り除いてくれました。Cocoaも同様にいいものでした——Macの世界の人たちはみんな知っていることだと思いますが、Windowsの世界から来ると、そのメモリ管理のアプローチはすごくクールだと思います(メッセージループからのそれぞれのポンプに対して実質的に新しい「ヒープ」が用意され、メッセージループに戻るとそれが自動的にクリアされる)。これによってガベージコレクションのオーパヘッドなしに文字列のようなものを返すコードが書けるようになります。

私たちはそれぞれのプラットフォームのデファクトのネイティブコンパイラを使っています(Linuxにはgcc、WindowsにはMSVC、MacにはXcodeのgcc)。この3つのコンパイラの間で私たちのコードをポータブルに保つのは比較的容易でした。そうするために、すべてのプラットフォームでデイリービルドするようにしています。ビルドは1つの夜間cronジョブにまとめられていて、それがソース管理からすべてチェックアウトし、Linuxビルドをキックし、WindowsのビルドをするマシンとMacのビルドをするマシンそれぞれにコンタクトしてビルドさせ、すべてが完了するまで待ちます。できあがるものは「オンラインアップデート」パッケージで、インターネットアップグレードサーバに直接ポストされ、テスタはテストシステムのそれぞれハードウェアにデイリービルドをインストールできるようになっています」


(オリジナル: The infinite music collection)

戻る

Personal tools