■2005-08-05
* [雑感] Perlなんですか?
使える言語は Perl と言うと何故にバカにされるのか?。 ああ、嫌なことを思い出しました。 前にもちらっと書いたSledge+改良blosxomのサイトに対して、いつだったか監査の方(ITコンサル?出身なんだって)がやってきて色々質問されました。で、一番最初のやりとりが「Webサーバは何ですか?」「Apacheです」「ああ、じゃあApacheとTomcatかなにかですね」「いえ、Perlです」
そうしたら、もう顔色がみるみる変わるんです。 ぱぁるぅ? みたいな怪訝そうな顔で「……本当にPerlなんですか? でも拝見しましたが動作が非常に軽いですよね?」
そうだ、今度「Tomcatですか」って聞かれたら「はい、トメキャットです」って答えることにしよう。 トメ婆さんの飼っている猫。 Perlで実装されてるの(参考:nekoは画面を走れるか?)。
* [Perl] ISO-2022-JP用に対応したEncod::MIME::Header
先日、Danさんのところに送ったコードをEncodeに取り込んでもらいました。無精してpodを書かなかったのですが
$header = encode('MIME-Header-ISO_2022_JP', $utf8);
という感じで使います。Jcodeのmime_encode
と同等の処理です(というか、Jcodeの処理を写しただけです)。これでMIME::Lite::TT::Japanese 0.04の問題も解決されるのかな。
■2005-08-07
* [メモ][Perl] Class::DBI関連
先月末、Class::DBIのメンテナが切れてメーリングリストやWikiを閉鎖したという話が話題になっていました。そのWikiで思い出したのですが、以前「同じテーブル構造が複数のデータベースにあって、一つのクラスで両方を扱いたい」場合の方法をUsingMultipleDatabasesを参考に書きましたが、色々ミスや不十分なところがあったので、Class::DBI::Plugin::MultiDatabasesとして書き直しました。
これも前書きましたが、Class::DBIの0.96から実装されている「メモリ内にあるオブジェクトの一意性」を保つための参照インデックス(弱いリファレンスを使う)が曲者で、例えば二つのデータベースに同じテーブル構造があって、$cd = Music::CD->retrieve(123)
とします。その後データベースを変更してから再度$cd = Music::CD->retrieve(123)
します。新しいデータベース上に存在する主キー123のデータを取り出したいのですが、前のオブジェクトが破壊されずに残っているため、古いデータベース上のデータが利用されてしまいます。そのため、スコープを限定しておく必要があるのですが、このプラグインではその辺のことを気にしなくても自動で何とかするようにしてみました。
ところで先日、Acme::Class::DBI::NoThreatsというモジュールがCPANに。中は名前空間が違うだけでClass::DBIと同じ。で、説明をみるとClass::DBIのメンテナを怒らせるような内容が。
* [メモ][雑感] あれやこれや
・「アジアの安全な食べ物」という犯罪者と、それに踊らされる馬鹿。 表題は大層きついですが、内容はまあ、至極真っ当。あー、いや、コメント欄とかかみてると、本当に馬鹿が多いのかしら。
・ふええええ 別にこのエントリに限らないのですが、ここの書き手の方はあんなしょーもないものに対して丁寧にツッコミを入れていて偉いなあ……
■2005-08-14
* [今月のAcme] 名前で笑わすモジュール
(夏休み無いですけど)夏休み特集”第一弾”、名前で笑えるものを2点紹介します。最初は Acme::UTF1。
use Acme::UTF1; use Encode qw( encode decode ); # .... $chars = decode('utf-1', $bytes);
次は Acme::Tpyo。与えられた文字列に誤字を含めて返すmisspell()
を搭載。 そんなことよりも先生! モジュール名が!
とりあえず、あっさりと終了。 次回の第二弾は、自作モジュール Acme::BeyondPerl::ToSQLを。まだCPANにあげてないのでいずれそのうち。
* [雑感][書籍] Learning PHP
PHP5で書かれたものをコードレビューすることになるので、とりあえず何か読んでおこうと思い、Learning PHP 5を注文。今日届いたのでざっと目を通したのですが、うーん、いくらLearningだからといって、"クラスとオブジェクト"の項目がたった2ページだなんて、あんまりな……
Programming Perlみたいなのを期待していたので(いやそれならProgramming PHPなんでしょうが、古かったので)ちょっと残念。
オライリージャパンからは何故かPHP関連の邦訳が出ないそうですが、これなら日本語版出さなくても、他社からいっぱい出てるから、需要なさそう。
■2005-08-18
* [今月のAcme] Perlを超えて
前回に引き続き、(夏休み無いけど)夏休み特集第二弾。 懲りずに自作モジュール。 Acme::BeyondPerl::ToSQL。
use Acme::BeyondPerl::ToSQ ("dbi:SQLite:dbname=acme_db","",""); my $value = 5; print 2 + $value; print 1.2 - 0.2; print 9 / 2;
一見すると何も変わっていませんが、useしたファイル内での数値計算をデータベース側で行っています。デバッグオプションをセットすると
SELECT 1.2 - 0.2 # 桁省略 SELECT 9.0 / 2.0 SELECT 2.0 + 5.0
というSQL文が発行されているのがわかります。これでもはやPerlの力を借りずとも、計算ができる! ……Perlの力を借りてDBとやりとりしているのは気にしない方向で。
仕組みは単純で、定数オーバーロードを利用して数値をオブジェクトにし、後は演算子オーバーロードでSQLを発行するだけです。デバッグモードにすると実行前に定数が先に処理されてるのが視覚的にわかりますね。
PostgreSQLやMySQLを使うと、sqrtやlog、atan2などのoverload可能な多くの関数が利用できます。
* [メモ] Acme::Inline::SQL
どうせなら Acme::Inline::SQL とかにしてほしかった(本日のコメント欄)
あー、Inline::SQLって何処かで見たような気がしたのですが、CPANで探しても無いですね。
$xored = eval_sql(q| SELECT 1 # 2 |);
みたいな感じかしら。 ちなみに普段PostgreSQL使っているので、MySQLを使うときに『PostgreSQL&MySQL逆引き大全』が結構重宝します(Amazonの書評にはバージョンが書かれていないとありますが、最初の方に対応バージョンが載っています)。
_ 弾 [どうせなら Acme::Inline::SQL とかにしてほしかった。 Dan the Man with Too ..]
_ file-glog [画面を走るnekoの作者です.「トメキャット」面白いですね.nekoをwebサーバにインストールしても,監査の方への..]
_ まかまか [>なにかネタを考えて見ます おお、それはとても楽しみです! nekoは何年か前にインストールしたことがあります。 ..]