2008-07-01から1ヶ月間の記事一覧

Gearman::Clientのdispatch_backgroundで非同期Job実行

JobQueueを使うと、時間のかかる処理でブロックせずにクライアントに応答を返せるというのと、メモリの食うモジュールを別プロセスに分離できて、アプリケーションサーバー側の1プロセスのサイズが小さくできるために、アプリケーションサーバーでリクエスト…

telnetでgearmandの管理

telnet localhost 7003でgearmandに接続して、gearmandの管理をコマンドベースで行う事ができます。 statusコマンド jobの関数名 キュー中のジョブのトータル数 実行中のjobの数 このjobを処理できるworker数の順で表示される workersコマンド 登録されたWor…

protobuffer-perl uses Moose

bradがmooseを使い始めるあたり、しがらみがないところからはmoose化が進んでいくのかもなぁ。Perl6がでるまではこの傾向は続く気がする。http://protobuf-perl.googlecode.com/svn/trunk/perl/# AppEngine周りもMoose化が進みそう

CHIのMultilevel driverで多段cache

MemoryになければMemcachedからcache取得、のようなコードを以下のように書けるというのがCHIの肝で、ここがData::ObjectDriverととても似ているんですね。subcachesのところに、driverを複数書くと、書いた順にcacheを探しにいきます。 #!/usr/bin/env perl…

Test::Classを使ったCPANモジュール

CHIはTest::Class使ってるなぁ。xUnit styleで書かれていて、個人的にはこのスタイルの方が好きかなぁ。テストケース毎の共通化もベースクラスでできるし。ただ、テストケースをlib/CHI/t/libってとこに置いてるけれど、tディレクトリの下に置いたほうが個人…

Coroでmuxtapeの情報取得をparalell化

dmakiさんの記事を参考に、つい先日書いたmuxtapeの情報取得スクリプトをCoro化してみました。 http://mt.endeworks.jp/d-6/2008/04/coroflickr.htmlCoroは、Javaだとconcurrent.utilに相当するものですね。お手軽に処理をパラレル化できるので、色々と使え…

開発時のvimの使い方

今までは、 必要なファイルを必要なときに開く Ctrl-zでsusppendして、なんかしてfgで戻る 最近は、 vim **/*.pm で全部バッファに開く fuzzyfinderでバッファ移動 + autocomplpopでbufferから補完 screenで移動して、なんかして、vim用screenのwindowに移動…

Devel::Coverでカバレッジテスト

機能テストで機能仕様を満たしているかを確認するのにテストケースを書く場合、それらのテストをしていてもカバレッジが100%になっていなければ、何らかの漏れがあるか、使われていない古いコードが残っているかの可能性が高くなります。どちらのケースも後…

S3問題のあれ

CHI::Driver::S3を作ればいいんじゃないかと思った。とはいっても、容量気にする必要がある場合には、画像とかそこそこでかいデータをキャッシングするには、分散ファイルシステムが必要になっちゃうなぁ。(Local?)->分散ファイルシステム->S3そこまでいっち…

CHIのDriverでAmazon S3にキャッシュ - CHI::Driver::S3

割とさくっといけそうだったので、S3用のDriverを書いてみました。 http://dann.g.hatena.ne.jp/dann/20080721/p6expire周りの実装がまるで抜けてるのとエラー処理がないのでリリースするにはまだ早いですが、set, get, get_multi系はとりあえず動作します。…

クラウドコンピューティングで進む分業化

EC2とS3の値段がさらに下がると、少し違った未来が見えるかもしれない。クラウドの世界は、今はAmazon、Google, Salesforceの3強だけれど、それにしたって安い。これが5年もたてばもっと下がる可能性は高い。現在のWebサービスの難しさは、アプリケーション…

サービス開発者の中の分業

サービス開発者というのは、もう少し細分化されるようになって、一つはデータに対して意味付けを与える開発者と、それを利用してWebサービスを作る開発者。どちらの層にも重要になってくるのは、クラウドの層に対する知識があるかないかということ。特にデー…

次は、DOD or Moco ?

CatalystとMooseは大体わからないことがあっても、ある程度は中まで手をいれられるようになったかなぁ。使ってるだけなのは、DBIC。ORマッパは、DBIC、DOD、Mocoなんだけれど、DBICは頑張ってよむのはしんどいなぁというところで、DODかMocoに突っ込んで何か…

Cloud Computingでの多段キャッシュ

ふと思ったのだけれど、 http://eucalyptus.cs.ucsb.edu/ はS3互換のAPIを出してるわけで、S3=>Eucalyptus とか多段でクラウドを使うってすればいんじゃないかと思った。信頼性/性能の高い順にクラウドが多段で並べて使うというイメージ。APIはデファクトを…

PerlとJavaでのテストの違い

結論からいうと大きな差はないのですが、少しだけ違いがあります。データドリブンのテストとしてのTest::Baseの存在とxUnit styleのテストが主流ではない事、この2点です。 Test::Base Javaの世界でのテストと似たものがないのは、Test::BaseとTest::Pod::Co…

Perlでのパフォーマンスチューニング

Benchmarkモジュールでベンチマークとって、それで遅かった場合にDevel::NYTProfでボトルネック探すというのが良さそうです。オーダーレベルで間違っていたりというのはBenchmarkモジュールでわかるので、その後のチューニングはDevel::NYTProfでやるという…

WWW::Muxtape::Scraper

http://github.com/dann/muxtape-scraper/tree/master 先日作ったMuxtapeのscraperをMoose化してみました。 package WWW::Muxtape::Scraper; use Moose; use Module::Pluggable::Fast name => 'scrapers', search => [qw( WWW::Muxtape::Scraper::Pa…

CHIのCache::Memcached::Fast用のDriverを作ってみた

CHIは、一言で説明すると、DODのキャッシング機構だけを切り出したようなモジュールです。 http://catalyst.g.hatena.ne.jp/dann/20080504/p2CHIは多段でキャッシングができるようになっていて、キャッシュを実際にするクラスがDriverで実現されます。今回は…

Web::Scraperでmuxtapeのtape情報の一覧を取得する

muxtapeで注目されているtapeを聞いてみたいなぁと思ってfansの数を引っこ抜いてみました。それだけだとつまらないので、おまけに曲情報なども取得するようにしてみています。 #!/usr/bin/env perl use strict; use warnings; use Web::Scraper; use URI; us…

Devel::NYTProfでプロファイリング

http-engineをNYTProfを使ってプロファイリングしてみました。HTTP::Engineの実行用のスクリプトtools/profile.pl use strict; use warnings; use HTTP::Engine; use IO::Scalar; my $engine = HTTP::Engine->new( interface => { module => 'CGI', …

Moose::Autoboxの速度

#!perl use Moose::Autobox; use Benchmark qw/timethese cmpthese/; cmpthese( timethese( 0, { autobox => sub { my $array = [ 1, 2, 3 ]; $array->push(4); }, normal => sub { my $array = [ 1, 2, 3 ]; push @{$array}, 4; }, } ) ); Rate autobox nor…

SeleniumのGoog/Badから考えるアクセプタンステスト

Seleniumは使いこなすと非常に強力なテストツールですが、向き不向きもあり、テスト用途によって、どのようなテストをどのようなタイミングで実行すべきかを変えた方がよくあります。そこで、SeleniumのGood/Bad、Seleniumのテストの用途、Seleniumのテスト…

SeleniumRCでTestSuiteを実行

SeleniumRCを使うケースだと定期的にTestSuiteを実行させたいなぁっていうのがあるんじゃないかと思います。以下のようなスクリプトをCRONで1日単位でまわして朝見るってだけでも、ユースケースレベルのテストを確認するのには使えます。 #!/bin/sh BROWSER=…

軽いterminal emurator urxvtに乗り換えてみた

MacでTerminal.appもiTermもどちらも重いので何とかならないかと思っていたところ、rxvt-unicodeというものがあることを知りました。http://blog.cohtan.org/2008/07/terminalappvimgvim.html早速使ってみたところ爆速です。体感で数倍以上早いです。autocom…

Curses::UI::Language::japanese

Curses::UI::Language::japaneseを本家に取り込んでもらいました。 以下のように指定すれば、Curses::UIのメッセージが日本語に。 Curses::UI->new( -color_support => 1, -language => "japanese", ); thanks shawn !

( Term::ShellUI + Devel::REPL ) / 2

Term::ShellUIとDevel::REPLのいいところを組み合わせると、シェル用にいいフレームワークが作れそうだなぁ。App::CmdみたいにApp::Shellとか、OOライクに作れる汎用フレームワークが欲しいなぁと。Shell::Amazon::S3はそれを意識して作っていたのだけれど、…

Web::Scraperのshellでhistory補完

Web::Scraperのshellをhistoryから補完できるようにしてみました。 shell系は使わないと忘れてしまうので、historyがあったほうがいいかなと思って作ってみました。~/.scraperhistoryを作っておくと、historyが使えるようになります。 --- scraper.orig 2008…

SeleniumIDEでさくさくアクセプタンステスト

ユーザー操作をシミュレートしてテストをしたいというニーズはあって、それに使えるツールとしてSeleniumIDEがあります。以下では、SeleniumIDEを使って、簡単にアクセプタンステストをする方法を説明します。 SeleniumIDEでテストケース記録 t/acceptance/ …

デフォルトグループの設定の完了

テスト投稿です

Wassr始めました

暇な時間を見つけてWassrクライアントでも作ってみます。