2009年04月30日

MySQL Conference & Expo 2009 に参加してきました

 先週一週間、MySQL Conference & Expo 2009 に参加してきました。ほとんどのキーノートのビデオや一部のセッションの資料は公開されているようなので、それ以外、全体からうけたイメージなどについて、つらつらと。

キーノートの動画一覧 (「Mysqlconf 09」で始まるもの)
プレゼン資料一覧

 サービスをスケールアウトする話は、意外と聞かなかったように思います。今回が初参加だったので間違っているのかもしれませんが、単純な「スケールアウトできるよね」という話ではなく、むしろ、アプリケーションデベロッパに負担をかけずにスケールアウト (もしくはスケールアップ) するデータベースを、どのように作るか、というところが盛り上がっていたように思います。一方で、クラウドコンピューティングに関しては、サービスをスケールさせる道具というよりは、(リソースの確保が)柔軟で安定したインフラストラクチャとして期待されている側面が大きいように感じました。今後は、両者をどう組み合わせていくか、というのが課題になってくるのかもしれません。

 カンファレンスにおいて、私は 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 用のバイナリもアップロードしてあるので、興味のある方はご覧ください。

q4m.31tools.com

 今回の変更は、唯一、linux (i386) 上において、テーブルサイズが 2GB を超えようとする際にクラッシュする問題の修正です。他の環境においては、変更はありません。

投稿者 kazuho : 2009年02月09日 20:43 | コメント (3) | トラックバック (0) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2009年01月30日

「自由な情報」のためのウェブブラウザ

 昨日開催された Google Chrome Out of Beta Party で、「「自由な情報」のためのウェブブラウザ」というタイトルで LightningTalk をさせていだたきました。内容としては、世界初?だった Google Chrome 用拡張ソフト GreasemetalJapanize といった、サイボウズ・ラボで携わっているソフトウェア/サービスを題材に、ウェブブラウザへの (ちょっと個人的な) 想いを語ったものとなっています。


[最初から] [戻る] [次へ] [PowerPoint]

 なお、中で出てくる「情報は自由を欲している (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 のサポート
FreeBSD のサポートについては、ソースからのビルドエラーを修正したのに加え、バイナリ版も同時にリリースするようにしました。MySQL AB の公式バイナリと組み合わせて動作確認を行っておりますので、よろしければご利用ください。

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 の概論から入門的な話をしたので、興味のある方はスライドをご覧ください。

Q4M Microblogcon
View SlideShare presentation or Upload your own. (tags: q4m mysql)

 カンファレンスの中で、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 を公開いたしました。

サイボウズ・ラボ、話題のウェブサイトをランキング化するサイト Pathtraq (パストラック) の統計情報取得 API を公開 - 6,000万件のブログやニュースの統計データから検索やランキング取得が利用可能に

 公開から約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 - 高速な共有メモリキャッシュ

 先週、社内プレゼンの資料作成からの逃避がてら、高速な共有メモリキャッシュを作ってみました。よろしければごらんください。

swifty - a very fast shared memory cache

投稿者 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) 。ついでに、開発中のウェブサービスに仕込んで、トップページでベンチマークを取ってみました。こんな感じです。

cache-adaptive.gif

続きを読む "Cache::Adaptive の使い方"

投稿者 kazuho : 2007年05月10日 17:26 | トラックバック (0) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2007年05月09日

負荷に応じてキャッシュを自動調節する Perl モジュール

Cache::Adaptive の使い方に続く

 最近かりかりとサーバサイドの実装をしています。修行の成果、だいぶ複雑な SQL も書けるようになってきました。DBMS の気持ちを考えながら SQL 最適化するのは楽しいですね。しかし、いくら SQL を工夫したところでパフォーマンスの限界はあるわけです。

 となると、採りうる選択肢はスケールアウト・スケールアップ・キャッシングの3つになります (もちろん組み合わせも可)。ただ、需要予測の最大値に基づいて機材を確保するのもあまり効率的とは言えませんし、リリース直後に徹夜でパフォーマンスのチューニングをするのもイヤです。というわけで、負荷に応じてキャッシュを自動調節するような仕組みがないのかなぁと思っていたのですが、見つからなかったので書いてみました。

ダウンロード: Cache-Adaptive.pm

 詳細は POD を書いて疲れたのでそちらを読んでください。以下は使い方の例。こんなことができます。

続きを読む "負荷に応じてキャッシュを自動調節する Perl モジュール"

投稿者 kazuho : 2007年05月09日 17:07 | トラックバック (0) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2007年04月05日

Mylingual Slides @ YAPC::Asia 2007

 YAPC::Asia 2007 TokyoJapanizeMylingual の考え方と現在の状況、および将来について発表をしてきました。途中でパソコンが2回もハングして、スライドをすべてお見せすることができませんでした。申し訳ありません orz こちらにおいておきますので、ごらんいただければ幸いです。


[最初から] [戻る] [次へ] [PowerPoint をダウンロード]

投稿者 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 を日本語化するサービスを作ってみました。

http://japanize.31tools.com

画面イメージ
 Japanize は、外国語のウェブサイトを日本語化するサービスです。Mozilla Firefox のエクステンションをインストールするだけで、いままで英語だったウェブサイトが日本語で表示されるようになります。翻訳データは、 wiki ライクなサービスによって共有・拡張されます。

 ホームページに Mozilla Firefox でアクセスして Firefox Extension をインストールするだけで、Google CalendarYouTube といった英語サイトの UI が、日本語に自動変換されるようになります。

 ご参考までに、いくつかの画面イメージを添付します。

続きを読む "ウェブサイトの UI を自動的に日本語化するサービス"

投稿者 kazuho : 2006年08月14日 12:04 | コメント (22) | トラックバック (16) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2006年06月20日

PERL5WEBDB で Movable Type デバッグ

 PERL5WEBDB のバージョン 0.02 をリリースしました。BEGIN ブロック内のコード表示をサポートしたので、MovableType のデバッグも可能になりました。

MovableType をデバッグ中の画面

 MovableType をデバッグする際の具体的な手順は以下のとおりです。

続きを読む "PERL5WEBDB で Movable Type デバッグ"

投稿者 kazuho : 2006年06月20日 15:33 | トラックバック (1) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2006年03月30日

PERL5WEBDB

 YAPC::Asia 2006 Tokyo での Lightning Talk にあわせて、 PERL5WEBDB を公開します。

画面イメージ

続きを読む " 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 をリリースしました。

ダウンロード: tgz / RPM

続きを読む "C-0.04"

投稿者 kazuho : 2006年01月23日 15:41 | コメント (2) | トラックバック (0) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2006年01月16日

MIME::Base64::URLSafe

 少し前になりますが、CPAN に MIME::Base64::URLSafe を登録しました。URL に Base64 されたバイナリデータを埋め込みたいけど、 +,/,= といった文字が入るのがイヤだな、という場合に使うことができます注1

続きを読む "MIME::Base64::URLSafe"

投稿者 kazuho : 2006年01月16日 21:24 | コメント (2) | トラックバック (0) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2006年01月12日

C-0.03

 C-0.03 をリリースします。

ダウンロード: RPM, ソースコード (GPL)

 上の RPM (竹迫さん作です。ありがとうございます) をインストールするか、ソースコードをダウンロードして cp C-0_03 /usr/bin/C && chmod 755 /usr/bin/C すれば、インストール完了です。
 Plamo Linux/Slackware や Debian を使っている場合でもRPM から変換してインストールできるらしいです。

 0.03 での変更点は、以下の3点です。

続きを読む "C-0.03"

投稿者 kazuho : 2006年01月12日 13:22 | コメント (5) | トラックバック (1) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2006年01月10日

C-0.02

 C-0.02 をリリースします。

ダウンロード URL: http://labs.cybozu.co.jp/blog/kazuho/archives/c/C-0_02 (GPL)
16:47 追記: 竹迫さんのブログ から RPM がダウンロードできます

 ダウンロードして、 cp C-0_02 /usr/bin/C && chmod 755 /usr/bin/C すれば、インストール完了です。

 このバージョンでは、以下のような機能が追加になりました。

続きを読む "C-0.02"

投稿者 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 です。特殊なクッキーを伴ったリクエストについてのみ、ファイル名を書き換えることで、開発者が開発中のファイルをテストすることができます。

表1. アクセス例
URIhttp://example.com/cgi-bin/foo.cgi
実行ファイル (一般ユーザー)/home/www/cgi-bin/foo.cgi
実行ファイル (開発者)/home/www/cgi-bin/.htwebdev-test-foo.cgi

 こんなものの何が便利なのかというと、下表のとおりです。小規模なサービスの機能追加/バージョンアップのサイクルを短くするという目標がご理解いただけると思います。

表2. 開発手法の比較
手法メリット/デメリット
別環境での開発+テストが容易
-開発環境が別途必要
-開発環境と運用環境の同一性を維持する必要がある
運用環境での開発 (別ファイル名)+開発環境が不要
-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 のリクエスト処理中は spinner.gif が表示されます (別のインジケータにすることもできます) 。

 詳しくは、上記リンク先をごらんください。

投稿者 kazuho : 2005年09月22日 14:06 | コメント (6) | トラックバック (0) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

2005年09月16日

さらば Paged List

 サイボウズ・ラボでも好きな人が多い Ajax ですが、これまでのところ、部分差換の技術として利用されているケースが多いようです。しかし、 Ajax は遅延送信の技術としても利用することができます。

 こちらのサイトをごらんください注1

ajaxscrollbar.gif


 なんてことはない、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) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク