livedoor PICS がリニューアルして、Flickr クローンに。livedoor フレパ, オークション についでここまでやるかのコピー具合。
そうそう、「Flickr みたいのがほしい」んじゃなくて「Flickr がほしい」んですよね。この戦略は正しい気がするなぁ。mixi のコピーであるフレパとどうやって social networking や community をマージしてくるかがここからのキモでしょうか。
Yet another と書いたのは、一応海外に 23 Photo Sharing というクローン気味サイトがあるからですが、やり過ぎ感がいいですね。
とはいえ、sledge ベースで prototype.js と script.aculo.us で yellow fade とか、Ajax で D&D な写真管理、Atom API で Web Service と流行りはキッチリとおさえていてグッドです。ところどころに文言が英語のままだったり、リンク先が # で動作しないボタンがあったりと 50% ルール気味なのも楽しい。
とりあえず次は del.icio.us とか Digg.com あたりをw
Joel on Software をまとめた書籍の日本語版が登場。Web でもかなり読むことができますが、本にまとまっていると読み応えがあります。ソフトウェアエンジニア、プロジェクトマネージャーなどソフトウェア開発にかかわる人たちすべてに強くオススメできる本です。
ちなみに、Joel 氏は弊社でもバグトラッキングに利用している FogBugz のメーカー Fog Creek の社長だったことをつい最近知りました。
Gmail がこんなエラーでアクセスできない状態が2日間つづいています。Google で検索 してみてもあまりヒットしないところを見るとかなりレアなメンテナンスに引っかかっているよう。エラーページにあるメールアドレスにメールしても auto-responder で定型文が返ってくるだけ。
個人メールは一応 IMAP にもためつつ、Gmail に転送してほとんど Gmail のインタフェースからしか利用していなかったので、不便度はかなり倍増。IMAP での利用にもどしましたがこちらでは spam フィルタの効きがかなり弱いので裁くのも一苦労。
同じ日に Bloglines, del.icio.us とメンテが重なっただけに、1箇所に情報を依存させすぎることの危険性を再認識した次第です。とにかく早く直ってくれー。
UPDATE: 12/23 15:00 復旧しました。その間のメールはとどいてるのもあれば抜けているのもあるような。。。これから徐々に入ってくるんでしょうか。もしその間に miyagawa@gmail.com にメールしたという方がいれば、@bulknews.net の方に送りなおしてもらえると助かります。
Google Homepage のモジュール (Widget) を定義できる API が公開 というわけで、さっそく Bulkfeeds のサーチボックスをつくってみました。
http://bulkfeeds.net/googleig.xml を Create a Section のフィールドにいれれば追加できます。HTML をいれるだけなのでカンタン。Widget 上で HTTP でデータをやり取りしたければ、GreaseMonkey っぽい HttpRequest をつかって javascript でゴリゴリかけるようです。
ご存知の方もいるかとは思いますが、このエントリは San Francisco からポストしています。が、この Blog はずっと日本で書いていて、もちろんこれからも帰国したときは JST で書くことになるため、Blog のタイムゾーンは JST にしてあります。
というわけで、同じ Blog でも海外からポストすると時刻がおかしなことになります。すべて UTC 表記にしちゃえばまぁいいといえばいいですが、それもなんだかな気がします。エントリごとに timezone を設定できるようなプラグインないかなぁと思って Brad Choate に聞いて教えてもらったのが、
「直接そういうのはないんだけど、RightFields 使えば似たようなことはできるかもね」
ということでした。
前置きが長くなりましたが、Right Fields プラグインはヤバげです。つい最近(12/6) リリースされた shareware ($15) なのですが十分にその価値ありそう。簡単に言うと、Blog ごとに、エントリ単位でメタデータ(カスタムフィールド)をどんどん追加できて、エントリ追加・編集の UI も勝手にそれにあわせてアップデートされます。映画レビューの Blog をつくりたければ、映画タイトル・レーティング・監督・主演・公開年月日 ... etc, という感じでどんどんデータベースを拡張していける。サイトのサンプルにあるレストランレビューのエントリ画面は こんな感じに。
拡張したフィールドは MTExtraFireld というタグ(あるいは独自にショートカット Tag を定義することも可能)でテンプレートに記述できるし、メタデータは PluginData の標準領域にいれることもできれば、独自に CREATE TABLE した SQL テーブルにマッピングすることも(ほかのアプリから参照するときはこっちのほうがよさげ)。File 型を選べば Upload ダイアログ、Date 型を選べば Year/Month/Day のプルダウンと MTDateFormat と連携、Linked Entry 型を選べば他の Blog ポストから選択、といたれりつくせり。
ちょっと簡単にサンプルで手順をご紹介。まずは BigPAPI と RightFields をダウンロードしていれます。(RightFields のページには BigPAPI が含まれていると書いていますが、実際は入ってないので別個インストール)
SYSTEM OVERVIEW -> PLUGINS か新規エントリ作成画面の下にある、RightFields の設定画面へ。設定する Blog を選択して、Extra Fields の Data Storage を決めます。ここでは簡単にできる PluginData (デフォルト)で。
で、Extra Fields で天気のプルダウンを設定。こんな感じに。
エントリ作成画面にいくと一番下にこんなのが出てきます。
あとはテンプレートをいじくって、
<MTExtraFields>
<MTIfExtraFields>
<MTIfExtraField field="weather">
今日の天気: <$MTExtraFieldValue field="weather">
</MTIfExtraField>
</MTIfExtraFields>
</MTExtraFields>
なんてのを Individual Template の好きなところに入れればオーケー。簡単ですねー。
RightFields を使うと簡単にエントリ単位にメタデータ(フィールド)を追加できます。逆転の発想でいうと、既存のテーブルへのアクセスや新規エントリ追加を MT のインタフェースからできて、そこからのアグリゲートページ生成を MT テンプレートでできる、という見方もできるかも(*1)。MT を Google Base にしてしまうキラープラグイン! というのはちょっと煽りはいってますが、あながち間違いともいえないかも。早速 donation しておきました。
*1) SQL テーブルのスキーマは MT 風に、テーブル名 mt_foo, カラム名 foo_id という風に命名する必要があるので、ほかのアプリですでに定義してある場合には使いにくいかもしれません。
新しい仕様ができたら早速 CPAN モジュールを、ということで WWW-Blog-Metadata-MobileLinkDiscovery-0.01 をリリースしました。
Ben Trott の WWW::Blog::Metadata のプラグインとして動作し、Mobile Link Discovery を見つけたらその URL と Content-Type が取得できるようになります。Mobile Link Discovery Validator の実装もこれを利用しています。
本日 TypePad Mobile 1.1 をリリースしました。SAKK でエンジニアリングにかかわった せきむらさん、谷本さん またプロジェクトにかかわったすべてのみなさん、おつかれさま&おめでとうございます。
このリリースと同時に「あるウェブページのモバイル版 URL を明示的に指定する」 Mobile Link Discovery のドキュメントも作成して公開しています。
TypePad の Mobile の作業をしていてふと限界におもったのが、Trackback のリンク表示方法でした。以前から「User-Agent のパターンマッチでモバイルページにリダイレクトする」という従来の方法になんとなく問題点があるなあと感じていました(リンクする際に「このリンク先はモバイルに対応していない可能性があります」という注意書きを出さなければいけない、など)が、この Trackback リンク表示はそれの典型的パターンだなあと。(それぞれ PC 版の URL で Trackback していても、モバイルでは適切なページにリンクできない)
そこで仕様書にもあるとおり、Techonrati やはてな、ライブドアの人たちと簡単にメールベースでディスカッションし、既存の XHTML (HTML4) で実現できる <link rel="alternate" media="handheld" href="..." /> というタグを埋め込むという仕様に落ち着きました。構想から実際にローンチするまで若干時間がかかってしまいましたが、それでも1ヶ月ちょっとでさっくりと持ってこれたのはとてもよいスピード感だったと思います。
TypePad, はてな, ライブドアが対応したことで数十万(数百万?)の Blog がすでに対応したことになりますし、ココログ・ブログ人など TypePad をベースにしたサービスでも今後随時対応していく予定です。他の Blog サービス (Publisher) や検索エンジン (Consumer) でも対応された場合にはご一報くだされば仕様書のリストに追加していきます。
また、簡易チェックツールとして Mobile Link Discovery Validator なんてのをつくってみました。URL をいれると Mobile Link Discovery に成功すればその URL を MIME-type とともに表示します。
リンク:
* Mobile Link Discovery 仕様書 (英語)
* TypePad Japan: TypePad モバイルの正式版バージョンアップ
* はてなダイアリー - Mobile Link Discovery 対応について
* Livedoor Blog: Mobile Link Discovery に対応しました
プライベートのスケジュールは iCal に対応している Mozilla Sunbird を使って WebDAV 上にデータをプッシュしているんですが、携帯電話からだといまいちスケジュールのチェックとかがうまくできない。というわけでサーバに PHP iCalendar をいれて、それを PSP の Web ブラウザで見るようにしてみました。Wi-Fi につながるとこならどこからでもこれが見えて good です。Web UI から編集(更新)もできるともっといいんですが、いまのところはできないみたい。
RSS 出力もついているので RSS チャネルに登録してみましたが、「不正なデータです」といわれて登録できなかった。PSP のクライアントは RSS 2.0 しかサポートしていないのでしょうかね。
編集とかも考えると、Backpack とかの iCal 対応サービスをブラウザでいじるほうが楽かもしれない。ちなみに Backpack はギリギリみえましたが Basecamp はファイルサイズがでかすぎてメモリ不足エラーになってしまいました。。
Trickster 2.0 の開発をスタートしました。まずは環境をということで、Subversion レポジトリ をつくり Trac をインストールしておきました。Mailing List も立ち上がっています。
初日の今日はとりあえずライブラリまわりの整理とプロトタイプになるツールをいくつかつくってみました。David が Rendezvous の Discovery/Publish と DAAP Client の PoCo 化 (Wheel::Run で fork して non-blocking) をしてくれたので、iTunes の DAAP proxy をつくってみました(samples/daap-mirror-proxy.pl)。起動すると、
1. Rendezvous (bonjour) で DAAP (iTunes share) を検索
2. それぞれに DAAP で接続して曲リストを取得してマージ
3. DAAP Server として立ち上がり、Rendezvous で Publish (Advertise)
4. 曲へのダウンロード(ストリーム)リクエストはそのままプロキシして答える
という流れです。
同一 LAN にある iTunes シェアにある曲すべてがマージされて1個のノードとして見えます。インクリメンタルサーチやブラウズを全体に対してできるのでそれだけで価値があるかもしれません。現在は DAAP Client のダウンロードが non-blocking ではないので再生するまでに数秒のタイムラグがあったりします。↑の例では coLinux から起動して自分の windows のミラーを見ている状態です(LAN などでつなぐ場合 coLinux は NAT モードではなくブリッジにすることが望ましい。そうでないと colinux からは自分の Win32 しか見えなくてつまらないです)。
現在は Net::Rendezvous::Publish::Backend のどれか (Howl または Apple Bonjour SDK) が必要ですが Pure POE で Rendezvous Publisher をつくる計画もあります。
初日はこんなところ。つづいて AirTunes にデータを投げ込むツールを作ってみようかと思っています。その次に Web Inteface とメディアサーバかな。
MP3tunes Locker:容量無制限・iTunes互換の音楽ストレージサービス - Engadget Japanese
mp3tunes.comから、ローカルにある音楽ライブラリを容量無制限でオンラインにバックアップ、どのコンピュータからでもライブラリにアクセスできるほか、他のPCのローカルHDDに1クリックで同期も可能という音楽ロッカーサービスが登場。iTunes用のプラグインも提供され、iTunesのライブラリをすべてオンラインストレージに同期することも可能。なんとDRMつきファイルも扱える。
これはヤバイ。oboe で iTunes の DAAP proxy をつかって HTTP からダウンロードしてきて再生するとは考えたもの。これはまさしく Hack が生活を便利にする一例でしょう。
というわけで、僕が数年前につくった Pure perl の mp3 jukebox ソフトウェア Trickster の 2.0 を作ろうと思っています。ちょうどパッチをおくってくれたりした David Davis が10月から Six Apart に join したこともあり、オフィスでひとしきり盛り上がりました。今週末に彼のアパートで Hackathon をする予定。
* Support AAC/ogg files
* Support transport layers like DAV/HTTP/DAAP/FTP etc.
* Multiple channels
* itunes DAAP proxy ala oboe (mp3tunes proxy)
* Bonjour (Rendezvous) support
* Multi-hop DAAP sharing e.g. Home and office itunes share
* musicbrainz integration for metadata detection
* play iTMS DRMed files somehow (fair-use, off course)
* fake Airport server to push your local file to Trickster
* Pluggable architecture to make web interface much better
* Rewrite web interface with Catalyst and Ajax
* Mobile optimized interface so you can request songs via mobile or PSP
* etc, etc.
という感じで、どこまでできるかわかりませんが楽しみなプロジェクトになりそう。Perl ライセンス でオープンソースとしてリリースされる予定なので contribution もウェルカムです。
Backpack にページ を作っておきましたので今後のアップデートはこちらをベースに。
Sledge や Class::DBI の trigger / hook のベースとなっている Class::Trigger のオーバーホールを予定しています。
* サブクラスで trigger をキャンセルできない
* 実行時の trigger 取り消し
* trigger 実行順序の操作
などの機能がなくてヤな思いをすることがあったので、その辺を解消したいと思っています。
この機会になにかいままで困っていることなどがあれば、miyagawa AT gmail.com まで、[Class::Trigger] のサブジェクトをつけてお送りください。パッチも(いつでも)歓迎です。