新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2010-04-28

[Perl]Data::Modelの継承クラス使ってて"extra bytes"言われたら

例えば、

my $model = MyDataModel->new;
my $name = $model->lookup( member => $member_id );

みたいなコードがあったとして、lookupメソッドが走るときに"extra bytes"ってエラーが出ることがあります。
そんな時は、テーブルに格納されているデータを疑ってみてください。もしかすると、decodeされっぱなしのデータが格納されているかもしれません。

2010-04-16

[Perl]Data::ModelをインターフェースとしてTokyoTyrantへデータの出し入れをする際にハマった

YappoLogs: KVSでORマッパーを使うという事を参考に、スキーマクラスを構築して、データの出し入れをしました…が、

Can't use string ("k… ÎKÇ
» Ú") as a HASH ref while "strict refs" in use at /usr/lib/perl5/site_perl/5.8.8/Data/Model/Driver/Memcached.pm line 188.

というエラーを吐いてしまい、データの出し入れどころじゃない状態になってしまいました。どうやらデータのシリアライズ処理に問題が発生しているようです…
で、念のためData::Modelのテストコード[t/060_driver/memcached/serializer.t]を読んでみたわけですが、シリアライズ処理のテストの冒頭で、テスト数が分岐していました。条件は、$Data::MessagePack::VERSIONが0.05以上か否か。0.05未満ならテスト数は20…。 ええ?Data::MessagePackってrequiredじゃないん?
もしや…早速このテストコードを実行。

# perl t/060_driver/memcached/serializer.t
1..20
ok 1
ok 2
ok 3
:
(中略)
:
ok 18
ok 19
ok 20

はわわわ…やはりData::MessagePackが(0.05未満|入っていない)って事ですねorz
んじゃ、とっとと入れましょうかということで

# cpanm Data::MessagePack
Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Data-MessagePack-0.10.tar.gz ... OK
Configuring Data-MessagePack-0.10 ... OK
Building and testing Data-MessagePack-0.10 for Data::MessagePack ... OK
Successfully installed Data-MessagePack-0.10

はい、Data::MessagePack 0.10が入りました!

では気を取り直して、再度テストコードを実行します。

# perl t/060_driver/memcached/serializer.t
1..100
ok 1
ok 2 - pack
ok 3 - unpack
ok 4
ok 5 - NOT INT: pack with Data::MessagePack
:
(中略)
:
ok 99
ok 100 - INT: pack with Data::MessagePack

おほー!来たよ来たわよ来ましたよ!!
この後、TokyoTyrantのデータをvanishしてから、データの出し入れが可能になりました!

2010-06-01 追記
当たり前といえばそれまでですが、TokyoTyrantをデータストアとして扱う場合、Data::Model::Driver::Memcachedのインスタンス生成時には、以下のように必ずSerializerを"Default"に設定する必要があります。

my $tokyo_tyrant = Data::Model::Driver::Memcached->new(
memcached => Cache::Memcached::Fast->new( {
servers => [qw/ 127.0.0.1:1978 /],
} ),
serializer => 'Default',
);

2010-04-15

[OpenVZ]centos-5-x86_64-default なVEコンテナでttservctl走らせる時の注意

TokyoTyrantをインストールすると、/usr/local/sbin/ttservctlと/usr/local/bin/ttserverができます。
普通だと

# ttservctl start
Starting the server of Tokyo Tyrant
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid
Done

となるところ、centos-5-x86_64-default なVEコンテナでは

# ttservctl start
Starting the server of Tokyo Tyrant
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid
/usr/local/sbin/ttservctl: line 72: ttserver: command not found
The server could not started

となってしまい、起動できません。
これは/usr/local/binにパスが通っていないのが原因なので、ここにパスを通すか、

# ln -s /usr/local/bin/ttserver /usr/bin/

とすれば、詮なく起動できるようになります。

[TokyoCabinet]CentOS5へのインストールメモ

しょっちゅう忘れるのでメモ。

・TCのconfigureにはlibbz.hが必須。

だから

# yum -y install zlib2-devel

と言う風にしなさい、なんですよ。

[OpenVZ]VEコンテナ内でGearman-1.11をインストールする際の注意

テスト時に、コンテナに対してメモリが最低512MBは割り当てられていないと、Out of memory になります。

コンテナに対してのメモリの割り当て方法は

# vzctl set [VEID] --privvmpages 512M --vmguarpages 512M --save

となります。

2010-04-13

[ネットライフ]to.というURI短縮サービスについてdig叩いてみたよ

非常に興味深い。

$ dig to.

; <<>> DiG 9.4.2-P2.1 <<>> to.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42625
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 0

;; QUESTION SECTION:
;to. IN A

;; ANSWER SECTION:
to. 86342 IN A 216.74.32.107

;; AUTHORITY SECTION:
to. 86342 IN NS ns1.iafrica.com.
to. 86342 IN NS tonic.to.
to. 86342 IN NS colo.to.
to. 86342 IN NS ns-to.ripe.net.
to. 86342 IN NS auth02.ns.uu.net.

;; Query time: 1 msec
;; SERVER: 192.168.1.241#53(192.168.1.241)
;; WHEN: Tue Apr 13 16:42:57 2010
;; MSG SIZE rcvd: 159



で、この記事の短縮URLがこれ。
http://to./3meg

[jQuery]IEがXHRをキャッシュするという厄介な事象を叩き潰すために

jQuery使う上での基本なのかもしれないけれど、覚えたての身としては知らないことだったのでメモ。

IEがajaxキャッシュするのを抑制 - はらぐろブログラマン にて知りました。

スクリプトの頭の方で

$.ajaxSetup({ cache: false });

とすればいいらしいです。

2010-04-06

[Perl]大抵のPerlerに恩恵を与えるcpanminus

cpanが使いにくいと嘆くアナタ!そんなアナタにこそ使ってほしいモノがある!あるんです!
それがcpanminus

使ってみようと思い立ち、実際に使ってみて、その素晴らしさに感激しました。

インストール


ここはさすがにcpanを使います。しばしの辛抱を…とはいっても、なんとcpanminusは依存モジュールがありません!!!依存モジュールはかなり少ないです。
# cpan App::cpanminus

これだけ。あっという間にcpanminusのインストールが終わります。

2010-11-10 追記
こちらの記事によると、以下の様なインストール方法もあるそうです。
$ mkdir bin && cd ~/bin
$ wget http://xrl.us/cpanm
$ chmod +x cpanm

さらに追記
$ wget http://xrl.us/cpanm

$ wget http://xrl.us/cpanm --no-check-certificate
としなければダメな環境もあるようです。

使ってみる


これも簡単。cpanmコマンドがほぼcpanと同じ役割を果たします。
今回はこのcpanmを使って、大ブレイク中のPSGI実装Plackをインストールしてみました。
root@nephos:/home/yt# cpanm Plack
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Plack-0.9929.tar.gz ... OK
Configuring Plack-0.9929 ... OK
==> Found dependencies: Hash::MultiValue, HTTP::Body, Filesys::Notify::Simple, Devel::StackTrace::AsHTML
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Hash-MultiValue-0.08.tar.gz ... OK
Configuring Hash-MultiValue-0.08 ... OK
Building and testing Hash-MultiValue-0.08 for Hash::MultiValue ... OK
Successfully installed Hash-MultiValue-0.08
Fetching http://search.cpan.org/CPAN/authors/id/M/MR/MRAMBERG/HTTP-Body-1.07.tar.gz ... OK
Configuring HTTP-Body-1.07 ... OK
Building and testing HTTP-Body-1.07 for HTTP::Body ... OK
Successfully installed HTTP-Body-1.07 (upgraded from 1.05)
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Filesys-Notify-Simple-0.06.tar.gz ... OK
Configuring Filesys-Notify-Simple-0.06 ... OK
Building and testing Filesys-Notify-Simple-0.06 for Filesys::Notify::Simple ... OK
Successfully installed Filesys-Notify-Simple-0.06
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Devel-StackTrace-AsHTML-0.09.tar.gz ... OK
Configuring Devel-StackTrace-AsHTML-0.09 ... OK
Building and testing Devel-StackTrace-AsHTML-0.09 for Devel::StackTrace::AsHTML ... OK
Successfully installed Devel-StackTrace-AsHTML-0.09
Building and testing Plack-0.9929 for Plack ... OK
Successfully installed Plack-0.9929

インストールログが短くて見やすいですね。これなら何が依存解決のためにインストールされたのか、一目で判ります。
しかも、依存モジュールのインストールは全自動!これならわざわざEnterキーを押したり、小賢しい真似をする必要もありませんね!^^;

2010-04-01

[Security]"Shareaholic for Firefox" leaks your online activity.

ShareaholicというFirefox pluginがあります。
これは、今見ているページをTwitterやtumblrに簡単にpostできるというものです。
しかし、勝手に情報を http://dcs.consumerinput.com/ に漏らしちゃうんですね。

詳細は暇を見て追記します。

4/4 追記
面倒ではない範囲で検証しました。

環境


まず、手元の環境を晒しますね。

  • OS:Ubuntu 9.10

  • ブラウザ:Firefox 3.5.8



準備


検証のために、こちらのテストページ(http://yellowstore.dip.jp/test.html)を用意しました。


また、通信中のHTTPヘッダを記録するツールとして、Live HTTP Headersというプラグインを使用しました。

手順


以下の手順を、それぞれShareaholicが有効である場合と、無効である場合の両方で実施しました。

  1. まず、Live HTTP Headersを起動します。

  2. 次に、テストページにアクセスします。

  3. Live HTTP Headersに記録されたHTTPヘッダをテキストファイル等に保存します。



結果


以下のような結果となりました。

Shareaholic無効


Shareaholicは無効です。

その結果、Live HTTP Headersに記録されていた内容は以下のとおりでした。

http://yellowstore.dip.jp/test.html



GET /test.html HTTP/1.1

Host: yellowstore.dip.jp

User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ja; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ja,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

If-Modified-Since: Sun, 04 Apr 2010 06:02:04 GMT

If-None-Match: "325e8f-85-48362f3a97e2f"

Cache-Control: max-age=0



HTTP/1.1 304 Not Modified

Date: Sun, 04 Apr 2010 06:02:42 GMT

Server: Apache/2.2.12 (Ubuntu)

Connection: Keep-Alive

Keep-Alive: timeout=15, max=100

Etag: "325e8f-85-48362f3a97e2f"

Vary: Accept-Encoding

----------------------------------------------------------



何度かリロードしてた為ステータス304が返されていますが、特に何も変哲はありません。

Shareaholic有効


では、Shareaholicを有効にしてみましょう。


その結果、記録されていた内容ですが…

http://yellowstore.dip.jp/test.html



GET /test.html HTTP/1.1

Host: yellowstore.dip.jp

User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ja; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ja,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

If-Modified-Since: Sun, 04 Apr 2010 06:02:04 GMT

If-None-Match: "325e8f-85-48362f3a97e2f"

Cache-Control: max-age=0



HTTP/1.1 304 Not Modified

Date: Sun, 04 Apr 2010 06:06:55 GMT

Server: Apache/2.2.12 (Ubuntu)

Connection: Keep-Alive

Keep-Alive: timeout=15, max=100

Etag: "325e8f-85-48362f3a97e2f"

Vary: Accept-Encoding

----------------------------------------------------------

http://dcs.consumerinput.com/fast-cgi/MI?ver=3ss&userid=30789874083664180®istrar=shr&d=http%3A%2F%2Fyellowstore.dip.jp%2Ftest.html



GET /fast-cgi/MI?ver=3ss&userid=30789874083664180®istrar=shr&d=http%3A%2F%2Fyellowstore.dip.jp%2Ftest.html HTTP/1.1

Host: dcs.consumerinput.com

User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ja; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ja,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive



HTTP/1.1 200 OK

Date: Sun, 04 Apr 2010 06:06:56 GMT

Server: Apache/2.2.3 (Debian) mod_python/3.3.1 Python/2.5.1 mod_ssl/2.2.3 OpenSSL/0.9.8c

Keep-Alive: timeout=5, max=500

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: text/xml

----------------------------------------------------------



ギョギョギョーッ!!!ななな、何か変なリクエストヘッダが吐かれてる~ッ!!!!
…っと、あまりの事にハコフグ帽子をかぶったオネエ系キャラっぽくなりましたが、要するにこの部分こそShareaholicのマズいところなんですね。

所見など


実際のところ、dcs.consumerinput.comに送られる情報については詳しく確認していませんが、リクエストのたびに、そのURLを付加して別のホストにリクエストを送るなんて事は、そもそもユーザーのオンラインでの行動を追跡する以外には考えにくいと思います。
それから、今回はLive HTTP Headersというプラグインを使用しての検証としましたが、もっと厳密に確認するなら、tcpdumpなどのパケット解析ツールを用いるべきでしょう。面倒なのでやりませんけどね。
とりあえずShareaholic使うのは危険なので止めといた方が無難ですね。