2009年04月30日
MySQL Conference & Expo 2009 に参加してきました
先週一週間、MySQL Conference & Expo 2009 に参加してきました。ほとんどのキーノートのビデオや一部のセッションの資料は公開されているようなので、それ以外、全体からうけたイメージなどについて、つらつらと。
プレゼン資料一覧
サービスをスケールアウトする話は、意外と聞かなかったように思います。今回が初参加だったので間違っているのかもしれませんが、単純な「スケールアウトできるよね」という話ではなく、むしろ、アプリケーションデベロッパに負担をかけずにスケールアウト (もしくはスケールアップ) するデータベースを、どのように作るか、というところが盛り上がっていたように思います。一方で、クラウドコンピューティングに関しては、サービスをスケールさせる道具というよりは、(リソースの確保が)柔軟で安定したインフラストラクチャとして期待されている側面が大きいように感じました。今後は、両者をどう組み合わせていくか、というのが課題になってくるのかもしれません。
カンファレンスにおいて、私は Q4M の発表 (Q4M (and Pathtraq) at MySQL Conference & Expo 2009) を行いました。Q4M の設計方針から使い方にはじまり、事例までをカバーした (かつてない) 丁寧な資料になっていますので、Q4M を使ってみようかな、という方はごらんください。また、既にお使いいただいている皆さんには、あらためて御礼申し上げさせていただきたいと思います。事例は引き続き絶賛募集中です。
また、併催されていた Percona Performance Conference (プレゼン資料一覧) でパストラックのバックエンドに関する発表 (Running a Realtime Stats Service on MySQL) を行い、こちらも好評を得ることができ、ほっとしています。
なかなか密度が濃くてつかれましたが、充実した一週間でした。お世話になったサンマイクロシステムズの方々をはじめ皆さん、ありがとうございました。
投稿者 kazuho : 2009年04月30日 17:28 | トラックバック (0)
2009年02月09日
Q4M 0.8.4 をリリースしました
MySQL 5.1 用のメッセージキュー「Q4M」のバージョン 0.8.4 をリリースしました。MySQL 5.1.31 用のバイナリもアップロードしてあるので、興味のある方はご覧ください。
今回の変更は、唯一、linux (i386) 上において、テーブルサイズが 2GB を超えようとする際にクラッシュする問題の修正です。他の環境においては、変更はありません。
投稿者 kazuho : 2009年02月09日 20:43 | コメント (3) | トラックバック (0)
2009年01月30日
「自由な情報」のためのウェブブラウザ
昨日開催された Google Chrome Out of Beta Party で、「「自由な情報」のためのウェブブラウザ」というタイトルで LightningTalk をさせていだたきました。内容としては、世界初?だった Google Chrome 用拡張ソフト Greasemetal や Japanize といった、サイボウズ・ラボで携わっているソフトウェア/サービスを題材に、ウェブブラウザへの (ちょっと個人的な) 想いを語ったものとなっています。
なお、中で出てくる「情報は自由を欲している (Information Wants to Be Free)」というフレーズについては、情報は自由を欲しているけれど - steps to phantasienの訳を参考にさせていただきました。この場を借りて、御礼申し上げます。
PS. Greasemetal につきましては、Google Chrome 本体で userscript がサポートされる方向なので (そのほうが技術的にも筋がいい)、そちらをお使いいただきますようお願いいたします (参考: HOW TO: Install Google Chrome Greasemonkey Scripts (Windows Only) - Mashable)。
投稿者 kazuho : 2009年01月30日 18:37 | コメント (2) | トラックバック (0)
2008年09月13日
Greasemetal 0.2 をリリースしました
Greasemetal のバージョン 0.2 をリリースしました。同僚の天野がいくつかの Greasemonkey 互換用関数を実装してくれた結果、互換性が向上するなど、いくつかの改良を施してあります (詳細はこちらをごらんください)。バージョン 0.1 をご利用の方は、バージョンアップされることをおすすめいたします。
投稿者 kazuho : 2008年09月13日 14:10 | コメント (3) | トラックバック (0)
2008年09月10日
Greasemetal (Google Chrome 用 Greasemonkey) を公開しました
Greasemetal - a Userscript Runtime for Google Chrome
投稿者 kazuho : 2008年09月10日 12:16 | トラックバック (0)
2008年09月02日
Q4M 0.8.3 をリリースしました (含 FreeBSD サポート)
MySQL 5.1 のプラガブルストレージエンジンとして動作するメッセージキュー Q4M のバージョン 0.8.3 をリリースしました。今回の修正点は、以下のとおりです。
- シャットダウン時 (および DROP TABLE 時) に発生する可能性のあるデッドロックの修正
- FreeBSD のサポート
2008年9月3日追記: Akinori MUSHA さんが Q4M を FreeBSD Ports Collection に追加してくださいました。ありがとうございます。Ports からのインストール方法については、Kazuho at Work: Q4M becomes part of FreeBSD Ports Collectionをご覧ください。
投稿者 kazuho : 2008年09月02日 01:46 | トラックバック (0)
2008年08月30日
MicroblogCon1 の報告と Q4M 0.8.1 リリースのお知らせ
先日 (8/27 水) 、弊社を会場にして、マイクロブログのサービス開発やそのミドルェアに関するカンファレンス「MicroblogCon1」を開催いたしました。スピーカーの方々、お越しいただいた方々、ありがとうございました (当日の模様は coji さんが撮影して中継、techtalk.jp にて公開してくださっています。 ありがとうございます) 。奥はその中で、Q4M の概論から入門的な話をしたので、興味のある方はスライドをご覧ください。
カンファレンスの中で、Gearman/TheSchwartz と Q4M の比較について話された id:tokuhirom 氏を始め複数の方から指摘されたのは、「Q4M はインストールがめんどくさい」という点でした。なるほどと思うところがあったので、自動ビルド&テスト環境を作成し、昨日公開したバージョン 0.8.1/0.8.2 からは、linux および Mac OS X 向けにコンパイル済みのバイナリをリリースに含めることができるようになりました (リリースの詳細)。
Q4M のバイナリ版およびインストール手順については、q4m.31tools.com/install.php をご参照ください。バイナリ版を使うことで、これまでよりも気軽に Q4M をお試しいただけるようになったことと思います。
投稿者 kazuho : 2008年08月30日 16:03 | トラックバック (0)
2008年08月13日
Q4M バージョン 0.8 をリリースしました
MySQL 5.1 用のメッセージキュー Q4M のバージョン 0.8 をリリースしました。基本的にバグフィックスリリースですが、特に優先度付きサブスクリプションあるいは条件付きサブスクリプションを使用している場合は、アップデートをお勧めします。
Q4M の最新版につきましては、q4m.31tools.com からダウンロード可能です。バグフィックスの詳細につきましては、Kazuho at Work: Q4M adoption by Mixi, and the release of version 0.8 をご覧ください。
投稿者 kazuho : 2008年08月13日 13:25 | トラックバック (0)
2008年07月23日
Pathtraq の API を公開しました
本日、Pathtraq の Web API を公開いたしました。
公開から約1年を経て、Pathtraq は、宣伝したりインストールしてくださる皆さんのおかげをもちまして、6,000 万 URL 以上注のアクセス統計を保持するデータベースに成長いたしました。この統計情報をどのように活用していくか、と考えたときに、皆さんからいただいたデータを囲い込んでおくのではなく、できる範囲で公開し、再利用してもらうべき、というのは自然な発想だと思います。
続きを読む "Pathtraq の API を公開しました"
投稿者 kazuho : 2008年07月23日 15:45 | コメント (2) | トラックバック (3)
2008年05月27日
メッセージキュー事始め with Q4M
今日、奥が開発し Pathtraq でも使っているメッセージキュー Q4M について説明する機会があったので、自分の頭を整理しながらスライドに起こしてみました。メッセージキューとはそもそも何か、という所から始まって、Q4M の内部構造と使用方法、さらには、ウェブサービス等でキューを使うべきいくつかのシナリオについても書いてありますので、よろしければご覧ください。
Q4M については、パフォーマンスチューニングの結果、オンメモリなら1秒間に万単位のメッセージを転送できるようになってきています。サイボウズ・ラボ以外でも Q4M が使われるようになるといいな、と思いました。
投稿者 kazuho : 2008年05月27日 18:17 | トラックバック (0)
2008年04月07日
Q4M Version 0.4 で高速なクローラを書いてみた
本日、MySQL 5.1 のプラガブルストレージエンジンとして動作するメッセージキューQ4M のバージョン 0.4 をリリースしました。本バージョンでは、条件付購読 (conditional subscription) という、特定の条件を満たす行だけをメッセージキューから読み込む機能に対応したのですが、これを使って、クローラを書いてみました。
使い方は以下のとおりです。
続きを読む "Q4M Version 0.4 で高速なクローラを書いてみた"
投稿者 kazuho : 2008年04月07日 17:43 | トラックバック (0)
2008年03月19日
Q4M (Queue for MySQL) 0.3 リリース
MySQL 上で動作するメッセージキュー「Q4M」のバージョン 0.3 をリリースしました。今回のバージョンアップで、以下の機能が追加になっています。
メッセージリレー機能
続きを読む "Q4M (Queue for MySQL) 0.3 リリース"
投稿者 kazuho : 2008年03月19日 06:29 | トラックバック (0)
2008年02月26日
Range Coder の展開速度を SSE で高速化 (してもらった)
二分検索 (バイナリサーチ) は、分岐予測が効きにくいため、パイプラインが深い最近の CPU とは相性の悪い処理です。Range Coder の展開処理においても二分検索がボトルネックになるのですが、光成さんに「SSE で高速化できないんですかね」と話したところ、さくっとコードを書いてくれました。ありがとうございます。
というわけで、まずは Calgary Corpus の paper1 でベンチマーク。
続きを読む "Range Coder の展開速度を SSE で高速化 (してもらった)"
投稿者 kazuho : 2008年02月26日 16:31 | トラックバック (0)
2008年01月22日
Pathtraq リニューアルのおしらせ (リアルタイム検索機能の追加ほか)
Pathtraq は、ウェブブラウザの拡張機能を通してアクセス情報を匿名化・統計処理することにより、ウェブ上の人気ページや注目のサイトを発見するシステムです。公開より5ヶ月、多くの方々に拡張機能をインストールしていただき (ありがとうございます)、統計として様々な見せ方をできる準備が整ってきたように思います。そこで今回、より便利にお使いいただけるよう、デザインのリニューアルと新機能の追加を行いました。
1. デザインのリニューアルについて
ウェブサイトのデザインを全面的に見直しました。今、何が話題になっているのかがよりわかりやすく、また、どのように活用できるかが、フレンドリーに伝わるようになったと思います。
2. 検索機能の追加について
従来から存在する検索エンジンの多くは、情報の「資料性」を重視しています。例えば Google で「自民党」を検索すると、党に関する基本的な情報が上位に表示されますが、党内外で、今、何が起こっているのかは、ほとんど表示されません。一方、「資料性」ではなく「時事性」を重視する検索エンジンとしては、ニュース専門の検索エンジンやブログ専門のものが存在します。しかしこれらは、検索範囲が限定されたり、あるいはランキングアルゴリズムが貧弱で、注目情報が探しにくい、といった問題を抱えています。 今回 Pathtraq に追加した検索機能は、HTML の解析機能とリアルタイムのアクセス統計を組み合わせることで、キーワードがどのような理由で注目されているか、的確にランクづけして表示することを目標においています。まだまだチューニングは必要ですが、例にあげた「自民党」をはじめ、様々なキーワードでお試しいただければと思います。
続きを読む "Pathtraq リニューアルのおしらせ (リアルタイム検索機能の追加ほか)"
投稿者 kazuho : 2008年01月22日 13:04 | コメント (1) | トラックバック (0)
2008年01月15日
Q4M - MySQL 上で動作するメッセージキュー
数年来ずっと「RDBMSに統合されたメッセージキューがほしい」と言ってきたわけですが、昨年末にストレージエンジンをプラグインとして開発できる MySQL 5.1 が RC になっていることに気づき、自分で作ってみました。
Q4M (Queue for MySQL) は MySQL 5.1 のプラガブル・ストレージ・エンジンとして動作するメッセージキューであり、堅牢・高速・柔軟であるよう設計されています。昨年12月遅くに開発が開始され、まだ非常に原始的ですが、かなり高速に動作します。
q4m.31tools.com
自分の英語を日本語訳するというのも変なものですが、ともかくそういったものです。なんだかんだ言っても、ちゃんとしたバイナリプロトコルの上に C + pthread で書かれたサーバなので、それなりに高速だと思います。ディスクに同期をとりつつパフォーマンスを稼ぐために必須の技術であるグループコミットも実装しましたし。
Q4M は MySQL のストレージエンジンとして動作するので、MySQL に接続できるあらゆるプログラミング言語から利用することができます。また、Perl むけには、既に dmaki さんによって Perl 用のラッパーモジュール (Queue::Q4M) が開発されています。初回リリースですし、運用環境での使用をお薦めするものではありませんが、興味のある方はお試しいただければ幸いです。
PS. Q4M に興味をもたれた方で del.icio.us のアカウントをお持ちの方は、こちらからブックマークしていただければ幸いです。
投稿者 kazuho : 2008年01月15日 05:25 | トラックバック (1)
2007年09月12日
swifty-0.02 と Perl バインディング
自作しているキャッシュシステム Swifty のバージョン 0.02 と Perl バインディングをリリースしました。ベンチマーク等はそちらをご覧いただくとして、こちらでは今後の課題を書きたいと思います。
- ダイレクトマップ方式をセットアソシアティブに変更する (さぼっています)
- エクスパイア時に複数のプロセスが更新作業を開始しないよう、事前更新機能と排他ロックを実装する
そんなところでしょうか。パージングが LRU ではなくランダムなのは、リードが lock-free なので修正は難しいかな、と思っています。まとまりがないエントリで恐縮ですが、リリースの告知をかねてということでご容赦いただければ。
投稿者 kazuho : 2007年09月12日 16:43 | トラックバック (0)
2007年07月30日
swifty - 高速な共有メモリキャッシュ
先週、社内プレゼンの資料作成からの逃避がてら、高速な共有メモリキャッシュを作ってみました。よろしければごらんください。
投稿者 kazuho : 2007年07月30日 21:13 | トラックバック (0)
2007年05月21日
Cache::Adaptive を簡単に使う方法
同僚の ZIGOROu こと山口さんが、「まだ CGI::Application 使ってるの〜?」とか言いながら、CGI::Application::Plugin::Cache::Adaptive を作ってくれました。このモジュールを使えば、ハンドラに属性を追加するだけでキャッシュを有効にできます。これは便利! ついでに私も、自分が使う(であろう)フィードバック関数をパッケージ化したモジュール Cache::Adaptive::ByLoad を作りました。
これらを使うことで、従来のコードはそのまま、ちょっとコードを追加するだけで、簡単に負荷調節機能付きウェブアプリケーションを開発することができます。
use Cache::Adaptive::ByLoad; use Cache::FileCache; use CGI::Application::Plugin::Cache::Adaptive; sub setup { ... $self->cache_adaptive( Cache::Adaptive::ByLoad->new({ backend => Cache::FileCache->new({ namespace => q(html_cache), }), })); } sub start : Cacheable(qw/path path_info query/) { ...
投稿者 kazuho : 2007年05月21日 11:36 | トラックバック (0)
2007年05月10日
Cache::Adaptive の使い方
昨日のエントリが好評のようだったので、いろいろ問題を修正したバージョンを CPAN にアップロードしました (Cache-Adaptive-0.02 - search.cpan.org) 。ついでに、開発中のウェブサービスに仕込んで、トップページでベンチマークを取ってみました。こんな感じです。
投稿者 kazuho : 2007年05月10日 17:26 | トラックバック (0)
2007年05月09日
負荷に応じてキャッシュを自動調節する Perl モジュール
最近かりかりとサーバサイドの実装をしています。修行の成果、だいぶ複雑な SQL も書けるようになってきました。DBMS の気持ちを考えながら SQL 最適化するのは楽しいですね。しかし、いくら SQL を工夫したところでパフォーマンスの限界はあるわけです。
となると、採りうる選択肢はスケールアウト・スケールアップ・キャッシングの3つになります (もちろん組み合わせも可)。ただ、需要予測の最大値に基づいて機材を確保するのもあまり効率的とは言えませんし、リリース直後に徹夜でパフォーマンスのチューニングをするのもイヤです。というわけで、負荷に応じてキャッシュを自動調節するような仕組みがないのかなぁと思っていたのですが、見つからなかったので書いてみました。
詳細は POD を書いて疲れたのでそちらを読んでください。以下は使い方の例。こんなことができます。
続きを読む "負荷に応じてキャッシュを自動調節する Perl モジュール"
投稿者 kazuho : 2007年05月09日 17:07 | トラックバック (0)
2007年04月05日
Mylingual Slides @ YAPC::Asia 2007
YAPC::Asia 2007 Tokyo で Japanize と Mylingual の考え方と現在の状況、および将来について発表をしてきました。途中でパソコンが2回もハングして、スライドをすべてお見せすることができませんでした。申し訳ありません orz こちらにおいておきますので、ごらんいただければ幸いです。
投稿者 kazuho : 2007年04月05日 13:41 | トラックバック (1)
2007年03月19日
キーワード抽出のススメ (Lingua::JA::Summarize がアップデート)
一年近く放置プレイしていたキーワード抽出モジュール Lingua::JA::Summarize をバージョンアップしました。(Lingua::JA::Summarize-0.07)
といっても、私がやる気を出したわけではなく、ほとんどの作業は同僚の中谷さんによるものです。機能の修正のみならず、丁寧なチュートリアル「キーワード抽出モジュール Lingua::JA::Summarize を使うコツ」 も書いてくださっています。キーワード抽出に興味がある方は、ぜひご覧ください。
投稿者 kazuho : 2007年03月19日 16:55 | トラックバック (0)
2006年08月14日
ウェブサイトの UI を自動的に日本語化するサービス
転職して1周年ということで、外国語のウェブサイトの UI を日本語化するサービスを作ってみました。
Japanize は、外国語のウェブサイトを日本語化するサービスです。Mozilla Firefox のエクステンションをインストールするだけで、いままで英語だったウェブサイトが日本語で表示されるようになります。翻訳データは、 wiki ライクなサービスによって共有・拡張されます。
ホームページに Mozilla Firefox でアクセスして Firefox Extension をインストールするだけで、Google Calendar や YouTube といった英語サイトの UI が、日本語に自動変換されるようになります。
ご参考までに、いくつかの画面イメージを添付します。
続きを読む "ウェブサイトの UI を自動的に日本語化するサービス"
投稿者 kazuho : 2006年08月14日 12:04 | コメント (22) | トラックバック (16)
2006年06月20日
PERL5WEBDB で Movable Type デバッグ
PERL5WEBDB のバージョン 0.02 をリリースしました。BEGIN ブロック内のコード表示をサポートしたので、MovableType のデバッグも可能になりました。
MovableType をデバッグする際の具体的な手順は以下のとおりです。
続きを読む "PERL5WEBDB で Movable Type デバッグ"
投稿者 kazuho : 2006年06月20日 15:33 | トラックバック (1)
2006年03月30日
PERL5WEBDB
YAPC::Asia 2006 Tokyo での Lightning Talk にあわせて、 PERL5WEBDB を公開します。
投稿者 kazuho : 2006年03月30日 10:48 | トラックバック (1)
2006年02月27日
WEISpub - WEIS Enabler for MovableType
プロトコルの仕様だけ書いておいて実装がないのもどうかと思うので、サンプルを作ってみました。
続きを読む "WEISpub - WEIS Enabler for MovableType"
投稿者 kazuho : 2006年02月27日 17:08 | トラックバック (0)
2006年02月24日
Web Identity Syndication (WEIS)
「2006年は認証APIの年」らしいので、ラボで暖めていた仕様を公開したいと思います。
続きを読む "Web Identity Syndication (WEIS)"
投稿者 kazuho : 2006年02月24日 12:25 | トラックバック (3)
2006年01月23日
C-0.04
告知が遅れましたが、C-0.04 をリリースしました。
投稿者 kazuho : 2006年01月23日 15:41 | コメント (2) | トラックバック (0)
2006年01月16日
MIME::Base64::URLSafe
少し前になりますが、CPAN に MIME::Base64::URLSafe を登録しました。URL に Base64 されたバイナリデータを埋め込みたいけど、 +,/,= といった文字が入るのがイヤだな、という場合に使うことができます注1。
投稿者 kazuho : 2006年01月16日 21:24 | コメント (2) | トラックバック (0)
2006年01月12日
C-0.03
C-0.03 をリリースします。
上の RPM (竹迫さん作です。ありがとうございます) をインストールするか、ソースコードをダウンロードして cp C-0_03 /usr/bin/C && chmod 755 /usr/bin/C すれば、インストール完了です。
Plamo Linux/Slackware や Debian を使っている場合でもRPM から変換してインストールできるらしいです。
0.03 での変更点は、以下の3点です。
投稿者 kazuho : 2006年01月12日 13:22 | コメント (5) | トラックバック (1)
2006年01月10日
C-0.02
C-0.02 をリリースします。
16:47 追記: 竹迫さんのブログ から RPM がダウンロードできます
ダウンロードして、 cp C-0_02 /usr/bin/C && chmod 755 /usr/bin/C すれば、インストール完了です。
このバージョンでは、以下のような機能が追加になりました。
投稿者 kazuho : 2006年01月10日 16:03 | トラックバック (2)
2006年01月06日
C - a pseudo-interpreter of the C programming language
Perl や Ruby では、ワンライナーで処理が書けて便利です。でも、なぜか C では書くことができません。仕事上の都合で、小さな処理を C 言語で書く必要があったので、ワンライナーも書くことのできる C 言語のインタプリタ(?)を作ってみました。
続きを読む "C - a pseudo-interpreter of the C programming language"
投稿者 kazuho : 2006年01月06日 15:20 | コメント (2) | トラックバック (6)
2005年12月27日
サイボウズ Office に Perl でアクセス
ここのところ、Perl Monger な同僚に、いろいろ教えてもらいながら、 Perl の勉強をしています。
手始めに、サイボウズ Office 6 のスクレイピングをするモジュールを書いてみました。といっても、新着情報をしかダウンロードできませんが... orz
続きを読む "サイボウズ Office に Perl でアクセス"
投稿者 kazuho : 2005年12月27日 17:11 | コメント (3) | トラックバック (2)
2005年10月06日
mod_webdev
ラボに入社する前に未踏プロジェクトで開発した「ウェブアプリケーション (Apache/Perl) 統合開発環境」(リンク先:PDF)をどうしたものか、というのが個人的な悩みでした。なにしろ、入社してから PHP のコードばかり書いているわけで、Perl の開発環境なんか不要なわけです注1。
一方で、運用中の環境で開発が行えるという点には今でも魅力を感じるので、その部分だけ切り出して、整理することにしました。
mod_webdev (リンク先: SourceForge.net)です。
管理画面 |
開発版にアクセスした画面 |
運用版にアクセスした画面 |
mod_webdev は、一言で言うと、条件つき mod_rewrite です。特殊なクッキーを伴ったリクエストについてのみ、ファイル名を書き換えることで、開発者が開発中のファイルをテストすることができます。
URI | http://example.com/cgi-bin/foo.cgi |
---|---|
実行ファイル (一般ユーザー) | /home/www/cgi-bin/foo.cgi |
実行ファイル (開発者) | /home/www/cgi-bin/.htwebdev-test-foo.cgi |
こんなものの何が便利なのかというと、下表のとおりです。小規模なサービスの機能追加/バージョンアップのサイクルを短くするという目標がご理解いただけると思います。
手法 | メリット/デメリット |
---|---|
別環境での開発 | +テストが容易 -開発環境が別途必要 -開発環境と運用環境の同一性を維持する必要がある |
運用環境での開発 (別ファイル名) | +開発環境が不要 -URL が異なるため結合テストができない |
mod_webdev での開発 | +開発環境が不要 +結合テスト可能 +ファイルリネームでデプロイ |
今後のバージョンでは、 PHP や Perl スクリプト内で、バージョンに応じた require や DB テーブル名の生成ロジック等を書けるようにしていきたいと考えています。
注1: 別に Perl を書いたらダメ、と言われているわけではありません。
投稿者 kazuho : 2005年10月06日 12:22 | コメント (2) | トラックバック (3)
2005年09月22日
CBL Partial Updater (20050922) リリース
簡単 Ajax ライブラリ、CBL Partial Updater に、スピナーを表示する機能をつけました。
Ajax のリクエスト処理中は が表示されます (別のインジケータにすることもできます) 。
詳しくは、上記リンク先をごらんください。
投稿者 kazuho : 2005年09月22日 14:06 | コメント (6) | トラックバック (0)
2005年09月16日
さらば Paged List
サイボウズ・ラボでも好きな人が多い Ajax ですが、これまでのところ、部分差換の技術として利用されているケースが多いようです。しかし、 Ajax は遅延送信の技術としても利用することができます。
こちらのサイトをごらんください注1。
なんてことはない、ML のアーカイブ表示です (先頭の方の日本語サブジェクトが化けているのはご愛嬌) 。ただ、従来の ML アーカイブと何が違うのかというと、メールの一覧を複数のページに分割せずに、表示している点です。
実は、このリスト、 Ajax で送信を遅延しています。50 件単位で、表示中の部分だけを転送するようになっているので、10000 件データがある場合でも、遅くなりません。
Gmail でも何故か未採用のテクニックですが、今後一般的になってくると思います。
注1: w3ml に手を入れたものでデモを作成しています。パッチを見つけるまで Ruby 1.8 で動作しなくて、どうなることかと思いました。
投稿者 kazuho : 2005年09月16日 15:12 | コメント (6) | トラックバック (1)
2005年09月08日
CBL Partial Updater
サイボウズ・ラボに入社して、そろそろ1ヶ月になります。その間、こちらのブログは閑古鳥が鳴いていたわけなのですが、そろそろ仕込んできた小ネタを公開していこうと思います。
というわけで、第1弾は AJAX を楽に書く話。
もともと PDA 用のウェブブラウザ屋さんだったりする関係で AJAX は敵だったのですが、ラボに入社以来、いろいろ実例を見せてもらっています。その中で、自分でも AJAX アプリを書いてみようと思ったのですが、めんどくさそうなのでラッパーを作りました。
このラッパー「CBL Partial Updater」を使えば、既存の PHP コードをそのまま AJAX 化することができます。
まず、例として、テストページ (PHP ソースコード, HTML テンプレート) をご覧ください。
通常の PHP コードと違うのは、以下の点です。
require_once('partialupdater.class.php');(略)
if (isset($_REQUEST['_'])) {
$updater = new CBL_PartialUpdater(array('encoding' => 'euc-jp'));
$updater->send($smarty->fetch('index.tpl'),array('count','table','error'));
} else {
$smarty->display('index.tpl');
}
これで、クライアントからのリクエストが AJAX だった場合は、CBL_PartialUpdater ライブラリが出力結果の HTML を解析し、指定された id 要素の部分だけを転送、差替してくれます (この例では、 count, table, error 要素が差し替わります) 。
あとは、HTML の中で、<span id="...">...</span> などと宣言して、差し替える部分を宣言し、フォームの onSubmit ハンドラを書けば終わりです。
これで、お気楽に AJAX することができて、私はハッピーになりました。
最後になりましたが、このライブラリは、 SourceForge.net を公開することになりました。こちらよりダウンロードできますので、ご意見、ご感想などいただければと思います。
2005/09/22 追記: 最新情報については CBL Partial Updater カテゴリ をご覧ください。
投稿者 kazuho : 2005年09月08日 13:38 | コメント (5) | トラックバック (1)