« 2007年04月 | メイン | 2007年06月 »

2007年05月25日

JavaScript/1.7 で協調的マルチスレッド

 JavaScript/1.7 の話なので Firefox 限定です。以前、

 残念ながら、JavaScript には非同期メッセージを同期化する方法はない!残念!><ほんとに残念!

 JavaScript 1.7 なら yield でできるんじゃないかと思いました。

Kazuho@Cybozu Labs: JavaScript で非同期処理

と書いたっきり失念していたのですが、社内で話題になったので実装してみました。こんな感じです。

続きを読む "JavaScript/1.7 で協調的マルチスレッド"

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

2007年05月21日

Japanize - ウェブサイトの高速化

 本日 (2007年5月21日)、Japanize のウェブサイトについて、下記の作業を実施しました。もし何か不具合がございましたら、ご一報いただければ幸いです。よろしくお願いいたします。

  • 一覧ページ等の表示速度を高速化
  • 「定期的に更新」用翻訳データの再構築を、5分間隔からデータ編集後即再構築に改良

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

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月12日

FizzBuzz - Perl 使って50バイト

1. 目指せ最短 (perl -eも含めて56byte)
TAKESAKO @ Yet another Cybozu Labs: FizzBuzz - Golf Challenge

 Perl を使ったワンライナーという条件でしょうか、だとすると、まだ短くする余地がありました。

seq 100|perl -ple'$.%5or$_=Buzz;$.%3||s/\d*/Fizz/' # 50バイト

 ただ、Language Ranking では bash が1位で43バイトなわけで、あと7バイト削る必要があるって、それはさすがに Perl では無理そう。ランキングを見るに、おそらく awk を使うのが正しいんでしょうけど、私には追いつけそうにありません。この辺が限界でした。

seq 100|awk 't=NR%3?NR:$2="Fizz",$0=NR%5?t:$2"Buzz"' # 52バイト
seq -f'%g Fizz Buzz FizzBuzz' 100|awk '$0=$(!($1%3)+!($1%5)*2+1)' # 65バイト

投稿者 kazuho : 2007年05月12日 13:58 | トラックバック (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) このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク