2004年12月27日月曜日

Class::DBIとApache::ReloadでInternal Server Error

mod_perlで動作するアプリケーションを開発する場合、更新されたモジュールをリロードしてくれるApache::Reloadのようなモジュールを利用するのが一般的だと思いますが、Apache::Reloadが有効になっている状態でClass::DBIを継承したモジュールを更新すると以下のようなエラーメッセージをはいてInternal Server Errorになるという現象に悩んでました。

>

[Sun Dec 26 20:06:02 2004] [error] Can't use an undefined value as a HASH reference
at /usr/local/perl-5.8.5/lib/site_perl/5.8.5/Class/DBI/Relationship/HasMany.pm line 51.\n
Compilation failed in require at /usr/local/perl-5.8.5/lib/site_perl/5.8.5/Apache/Reload.pm line 140.\n

<

そこで少し調べてみると、Re: Apache::Reload and CDBI won't play togetherに次のような記述が。

>
Class::DBI prevents you from overwriting already declared methods. To
fix this, you would need to hack Apache::Reload to clear the symbol
table of your package just before reloading it, or hack Class::DBI to
ignore overwriting subs.
<

Class::DBIはすでに宣言されているメソッドの上書きをさせないのが原因で、これを回避するには、リロードされる前にシンボルテーブルをクリアするようにApache::Reloadをhackするか、上書きを無視するようにClass::DBIをhackしろということのようです。

そこで今回は開発環境でしか使わないApache::Reloadをhackし、パッチを書いてみました。(Class::DBIに比べてApache::Reloadはコードの量が少ないのでhackが簡単。)

>

--- Reload.pm.orig 2004-12-26 19:35:31.000000000 +0900
+++ Reload.pm 2004-12-26 20:22:40.000000000 +0900
@@ -122,6 +122,14 @@
}

if ($mtime > $Stat{$file}) {
+ my $package = $key;
+ $package =~ s/\//::/g;
+ $package =~ s/\.pm$//;
+ if ( UNIVERSAL::isa($package, 'Class::DBI') ){
+ no strict 'refs';
+ warn "Apache::Reload: clear the symbol table of $package\n" if $DEBUG;
+ %{"$package\::"} = ();
+ }
delete $INC{$key};
# warn "Reloading $key\n";
if (my $symref = $UndefFields{$key}) {
<



2004年12月25日土曜日

画像がない場合は「No image」画像を表示するように

amazletのJavascriptを参考にして、Amazon Keyword Searchも商品の画像がない場合、「No Image」の画像を表示するようにしました。

それと地味にブラウズノードを手動で追加してます。自動化はまだできず。。



2004年12月24日金曜日

Class::DBI::DTO

前々からClass::DBIでデータをcreateする際の引数にハッシュのリファレンスでなく、オブジェクトを渡せたらいいなーと思っていたので、そんな感じのことができるClass::DBI::DTOというモジュールを書いてみました。
Class::DBI::DTO - Data Transfer Object for Class::DBI
ドキュメントは途中ですがあしからず。。
dtoメソッドで生成されるインスタンスはparamメソッドを持っているので、SledgeのFillinFormではadd_fobjectにそのままインスタンスを渡せます。

DTOという単語はオブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座を読んでいたときに出てきたもので、JAVAの偉い人が考えた概念らしいです。このモジュールの用途として、データをセッションに入れたり、そのままフィルインさせたりと何となくTransferな感じかなーと思ってこの名前を付けました。勝手に使ったら怒られるんだろうか。。

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座



2004年12月17日金曜日

Shibuya Perl Mongers テクニカルトーク #5

Shibuya Perl Mongers : Shibuya Perl Mongers テクニカルトーク #5に行ってきました。アルファギークな方々による技術的に濃ゆい話(iPod,ITunesのAPI,SpiderMonkey,SOAP,XML-RPC,TDD,JAPHなど)をたっぷり聞いてきました。

特に参考になったのが竹迫さんのXML::ParserのUTF8フラグ問題の対処方法。perl5.6、5.8のどちらにも通用する対処方法は今後の開発に使えそうです。

また、JAPHを読むでは、マジカルインクリメントを用いて「perl」と表示するというコードに関心。

>
my $A="a";for(1..285075){$A++;}print"$A";
<

文字aをインクリメントしていくと、285075番目がperlという文字列になるということですが、ふと「horiuchi」は何番目なんだろうと気になり、それを出すコードを書いてみました。

>
my$a='a';my$b=1;my$c=shift;while($a ne $c){$a++;$b++}print"$b";
<

今朝の9時半から計算し始めましたがまだ計算してます。。現在「112348132」。。いつ終わるかなー。。

Perl Mongersに初めて参加したのが去年の今頃。そのときは自分が何も知らなすぎてこの人たちは何を言ってるんだとかなりのカルチャーショックを受けたのを覚えています。今回もSpiderMonkeyとか初めて聞く単語もあって、いい刺激になりました。

それと、帰りにh.g.lさんとボンディ 神保町本店 で食べたカレーがおいしかったです。




2004年12月16日木曜日

MIME::Lite::TT::Japanese-0.05

MIME::Lite::TT::Japaneseを0.05にアップデートしました。

search.cpan.org: Yasuhiro Horiuchi / MIME-Lite-TT-Japanese

アップロードしたばかりでCPANにはまだ反映されてませんがそのうち反映されると思います。
反映されました 11/16 9:00

0.04からの変更点は

- Dateフィールドに日本のローカルタイムをセットするようにした。

の一点です。MIME::Lite::TT::Japaneseから受け取ったメールの日時がユニバーサルタイムになっていて、Beckyなどで受信するとぱっと見、日付がずれているように見えるのが気になったので、修正しました。ローカルタイムの生成にはMail::Dateを使わせて頂きました。



Sledge::Plugin::SaveUploadImage-0.02

アップロードされたファイルをjpg,gif,png形式で保存するSledge::Plugin::SaveUploadImageを0.02にバージョンアップしました。

Sledge::Plugin::SaveUploadImage-0.02

保存の際の画像のサイズを指定できるようにしました。

また、0.01からインターフェースを変えました。
0.01では保存先のディレクトリとファイル名を別々に渡してやる必要がありましたが、
0.02ではこれを一つにまとめてパスとし、パスの最後が/で終わっている場合はディレクトリと見なし、ファイル名は自動的に発行するようにしました。

返値はファイル名でなく保存先のパスに変更しました。









2004年12月13日月曜日

Google Suggest

Google Suggestがおもしろいです。検索フォームに単語を入力するとそれを補完する形で検索単語の候補をGoogle側でリストアップし、表示してくれます。検索結果の総数も一緒に表示してくれるので、どの単語が一般的なのかとか、単語のスペルはあってるかとか検索意外にも役立ちそうです。

そして早くもmiyagawaさんがperlモジュール化してます。その早さにびっくり。

Amazon Keyword Searchをちょこっと拡張

Amazon Keyword Searchのブラウズノード検索をちょこっと拡張しました。拡張点は以下の通り。

-ブラウズノードの階層構造に対応
--ノードに子ノードがある場合は右側に子ノード一覧を表示するようにしました。

-ノードのパンくず表示
--ノードのパンくずを書籍情報の上に表示するようにしました。

-2度目以降の表示の高速化
--今までは同じノードのランキング表示でもアフィリエイトIDが異なるとキャッシュを使わなかったんですが、同じノードであればキャッシュにヒットするようにしました。

-Google Adsenseをつけた
--URLトラッキング機能を試したかったのでつけてみました。

ブラウズノードについては、現在は手動で更新しているので、すべてのブラウズノードを網羅していません。この部分については手動で追加していくのはしんどいので自動化したいですね。
時間があるときにWWW::Mechanizeとかを使ってやってみようと思います。



ドラクエ8買おうかと思ったけど。。

昼に久しぶりに新宿に出たので、ヨドバシでドラクエ8買っちゃおうかなーと思ったんですが、ゲーム館にいってみるとなにやら長蛇の列が。。今日はPSPの発売日だったんですね。あまりにも人が多くて買うのに時間がかかりそうだったので、ドラクエ8はあきらめました。。

2004年12月7日火曜日

AWS Keyword Searchにブラウズノード別売り上げTOP20を追加

hori-uchi.com: AWS Keyword Searchにブラウズノード別売り上げTOP20を表示する機能を追加してみました。

キーワード検索についてもちょっと修正して、ページングを行えるようにしました。また、1ページに表示する件数を20件にしたので、検索速度も少し速くなったと思います。


Template::Plugin::TagRescue

Webアプリケーション開発において、ユーザが入力したデータをブラウザに表示するような場合には、XSSなどの脆弱性を排除するため、HTMLタグのエスケープは必須です。
でも、What's Newをブラウザから更新するようなアプリケーションの場合、aタグは使いたいとか、imgタグは使いたいというような特定のタグのみ許可してほしいという要望は結構あるものです。

これを簡単にやってくれるのがTemplate::Plugin::TagRescueです。フィルターとして動作するので、使い方も簡単。

>

[% USE TagRescue%]
[% '<a href="http://hori-uchi.com">hori-uchi.com</a><b>bold</b>' | html_except_for('a') %]
<



Template::Toolkitのテンプレート内で割り算

Template::Toolkitのテンプレート内で割り算の商を取得したくて、
>

[% c = int (a / b) %]
<
などと直感的に書いてみたんですが、やっぱり構文エラーになってしまいました。しょうがなくマニュアルを眺めていると、以下のような記述が。

>>
Template Toolkit Manual: Directives

The 'div' operator returns the integer result of division. Both '%' and 'mod' return the modulus (i.e. remainder) of division. 'mod' is provided as an alias for '%' for backwards compatibility with version 1.

[% 15 / 6 %] # 2.5
[% 15 div 6 %] # 2
[% 15 mod 6 %] # 3
<<

>

[% c = a div b %]
<
でできるんですね。絶対忘れるのでメモ。


2004年12月6日月曜日

perl 5.8.6 released

perl5.8.6がリリースされました。

5.8.5からの変更点はsearch.cpan.org: perldelta - what is new for perl v5.8.6で確認できます。






Jcodeが0.88にバージョンアップ

search.cpan.org: Dan Kogai / Jcode-0.88

CPANのアップデートをみてたらJcodeが0.88にバージョンアップされてました。
Encodeのラッパーになるって話を聞きましたがそれはまだのようです。


2004年12月4日土曜日

Amazon Keyword SearchとBidders Keyword Searchに手を加えました。

先日作ったAmazon Keyword SearchBidders Keyword Searchに以下のような改良を施しました。

**Amazon Keyword Search
-任意のアフィリエイトIDを使えるようにした。

今までは無条件で僕のアフィリエイトIDを埋め込んでいましたが、URLに特定の書式でアフィリエイトIDを埋め込むことでそのアフィリエイトID付きのリンクを生成するようにしました。URLの書式はこんな感じです。
>

[]http://hori-uchi.com/aws/aaff/[]アフィリエイトID/
<
たとえば僕のアフィリエイトIDはhori-uchiwebloなので、それを埋め込むとこうなります。
>

[]http://hori-uchi.com/aws/aaff/hori-uchiweblo/[]
<

**Bidders Keyword Search
-検索した商品にアフィリエイト付きリンクをつけた。
-任意のアフィリエイトIDを使えるようにした。

ビッダーズの方もURLに任意のアフィリエイトID,リンクIDを埋め込むことでキックバック先を変更できるようにしました。URLのルールは以下の通りです。

>

[]http://hori-uchi.com/bidders/baff/[]アフィリエイトID/リンクID/
<

実際に値を放り込むとこんな感じになります。
>

[]http://hori-uchi.com/bidders/baff/0s8fBBsidxhs_uQRu3db4Nq--/309638/[]
<

後は両方ともページ送りがついてないので、それはそのうちつけようかと。。Data::Pageでも使えば簡単にできると思うので時間を見つけて実装します。

2004年12月3日金曜日

ビッダーズWebサービスもいじってみました

先日のアマゾンウェブサービスに続いてビッダーズWebサービスもいじってみました。少しいじってできたものがこれです。今回もperl, Sledge, mod_perlで作ってます。

hori-uchi.com: Bidders Keyword Search

機能は前回のアマゾンと同じくただ検索できるだけ。。
とりあえずさわってみた印象として、
-まだ利用者数が少ないのかレスポンスが早くて快適
-検索キーをUTF-8でなくShift_JISで渡すのにちょっと驚いた。
-レスポンスに画像のリンクあるけど商品へのリンクはない??

ビッダーズWebサービス自体はまだベータ版ということでこれからも機能拡張していきそうです。

ビッダーズもアマゾンなどと同じくアフィリエイトをやっているようなのでほんとはこれと絡めたかったんですが、明日は朝から、Internet Week 2004のWeb and Internet Applications Day に参加するのでとりあえず今日は寝ることにします。


2004年11月30日火曜日

Sledge::Plugin::SaveUploadImage

フォームからアップロードされた画像を指定の形式に保存するためのSledgeプラグインを書いてみました。

Sledge::Plugin::SaveUploadImage

自分のPagesクラスでuseすると、各画像フォーマット保存用に用意したsave_as_jpg, save_as_gif, save_as_pngがアップロードオブジェクトにインポートされます。save_as_xxxメソッドは引数に保存先のディレクトリのみ指定した場合は保存するファイル名を自動的に決定してくれるので、テンポラリーファイルを保存する際にいちいちテンポラリファイル名を考えるのが面倒くさいと思っていた人にとっては便利かなーと思います。
こんな感じに使います。

>

package Your::Pages;
use Sledge::Plugin::SaveUploadImage;

my $upload = $self->r->upload('upload_file');
my $filename = $upload->save_as_jpg( $save_dir );
<


2004年11月29日月曜日

Amazonウェブサービスで遊んでみました。

今週末はAmazonウェブサービスをいじってました。それでできたのがこれです。
hori-uchi.com: AWS Keyword Search
SledgeとNet::Amazonを使って作り、mod_perlで動かしています。単純な検索アプリです。ちなみに検索結果のリンクには僕のアフィリエイトIDが入ってますのでここから買ってもらえると僕がすこししあわせになりれます(笑)。

それにしてもNet::Amazon便利すぎです。RESTでどうこうとかXMLがなんたらとか全く意識しないでAmazonウェブサービスを利用できちゃいます。この部分の実装はほんとに一瞬でできてしまいました。

しかーし、Net::Amazonのおかげでこのまま順調にいくかと思いきや、別のところではまってしまいました。。
CGI環境で動かすと問題ないんですが、mod_perlにすると、以下のようなエラーがたまにでてしまうんです。

>

Use of uninitialized value in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.5/Log/Log4perl.pm line 122.
[Sun Nov 28 20:37:21 2004] [error] Undefined subroutine &main:: called at /usr/local/lib/perl5/site_perl/5.8.5/Log/Log4perl.
pm line 122.\n
<

結構悩みましたが、Log::Log4perlをuseする時点でたまにエラーがでているようなので、apacheの起動時にuseするようにしたところ、エラーがでなくなりました。でも原因がよくわからないのがちょっと気持ち悪いです。だれかおしえてー。


2004年11月28日日曜日

perl 5.6 -> 5.8 on FreeBSD

今日はNet::Amazonをいじっていたんですが、XMLいじるならperlのバージョンは5.8系がいいよねとふと思い立ち、テスト用のFreeBSDサーバのperlのバージョンを5.6.1から5.8.5にアップしてみました。

とりあえず、/usr/ports/lang/perl5.8に移動してmakeしてみるとすんなりOK。問題あればエラーでこけるだろうとmake installも実行。。すんなりインストール完了。とっても簡単。(本当はportupgrade -o lang/perl5.8 -f perl-5.6.1_15 とやるのが正解みたいです。。)
>

# cd /usr/ports/lang/perl5.8
# make
# make install clean
<

次にシステムにperl5.8.5がインストールされたよということを知らせるためにuse.perlコマンドを実行しました。
>

# use.perl port
<

次にperlを使っている他のports達に5.8になりましたよと伝る作業を行いました。これにはワイルドカードが使えるportupgageを使うのが簡単です。これはインストールされているperlモジュールを5.8用にアップグレードするコマンドです。
>

# portupgrade -f p5-\*
<

さらにmod_perlもインストールし直しました。これでだいたいOKだと思います。後は何か問題が起こったらその場で対応ということにします。

今回の作業を行うに当たり、下記のサイトを参考にさせて頂きました。
SpamAssassinの導入設定メモ. [FreeBSD](fkimura.com)



2004年11月25日木曜日

iモード向けサイトでリダイレクト使う際は最後の/に注意

今日iモード向けのコンテンツで、QVGA端末かQQVGA端末かを判別して各端末用のページにリダイレクトするというスクリプトを書いたんですが、リダイレクトする際に必ず「ページが移動しました」のようなメッセージがでてしまうという現象に出くわしました。
今まで同じようなスクリプトを書いたときにはこんな現象が起きたことがなかったので、一瞬とまどいましたが、原因はなんてことなく、Locationで指定した飛び先のURLの最後に/(スラッシュ)がついていなかったからでした。
たとえば、http://hori-uchi.com/qvga/index.htmlにリダイレクトさせたくて、
>
print "Location: http://hori-uchi.com/qvga";
print "\n\n";
<
と記述すると、携帯のブラウザではまずhori-uchi.comの/qvgaというファイルを見に来るのですが、そのファイルがないので(ディレクトリなので)、次に/qvga/index.htmlを取得しようと試みます。どうやらこのファイルがないので・・・のあたりで、「ページが移動しました」のようなメッセージを表示するようです。/があるとないとで大違いなんですね。

2004年11月22日月曜日

Koders - ソースコード検索エンジン

Koders - Source Code Search Engine

>>
Koders is a search engine for source code. It enables developers to easily search and browse source code in thousands of projects hosted at hundreds of open source repositories.
<<

Kodersはソースコード検索エンジンで、オープンソースのプロジェクトのソースコードを対象に検索を行うことができるようです。Perlのコードも検索できますが、僕が試した限り、あまり役に立つようなコードがでてきませんでした。オープンソースのプロジェクトっていうとPerlは補助的に使われる程度でメインの言語ということがあまりないからでしょうか。
利用方法としては同じ単語、たとえば「mysql」などを検索キーとしてそれぞれの言語で検索を行い、各言語でDBの接続をどのように記述するのかをみて楽しんだりするなんてことはできそうです。

このソースコード検索エンジンですが、社内のサーバに設置して、社内のマシンに散乱しているソースコードを検索するのに使えるとすごーく便利だなーと思います。実はgonzuiというソフトでそういうことができそうなのでgonzuiには非常に注目しています。



2004年11月21日日曜日

とうきょうとたいとうく・・・

眞鍋かをりのここだけの話 powered by ココログ: いぬああいふきをよんでて思わずわらっちゃいました。『サラダの国のトマト姫』の二面のパスワードって。。

よくよく考えてみると僕もファミコンのパスワードって結構頭に残ってます。すぐに浮かんできたのが「とうきょうとたいとうくこまがたばんだいのがんぐだいさんぶのほし」。確か「聖闘士星矢 黄金伝説」のパスワードでこれを入力すると最強の状態でゲームをスタートできたような。
あとは「ぺぺぺぺぺぺぺ・・・べべべべべべ・・・」。「キャプテン翼」のパスワードでこれもかなり強い状態で始めることができたはず。かなりうろ覚えですがこのパスワードだと立花兄弟のレベルが低くて使い物にならなかったような。。

なんかとっても懐かしい気分になりました。



2004年11月15日月曜日

perl5.8.5でClass::Fieldがtestでこける

新しいサーバにSledgeをインストールしていたところ、Sledgeを動かすのに必要なモジュール、Class::Fieldがmake testでこけました。原因はperlのバージョンによるwarnningのメッセージの違いによるもののようなので、特に気にせずmake installしてしまってOKだと思います。

>
::ok( $warnings eq <<WARN,    'Improper use of fields & base warned about' );
Bar is inheriting from Foo but already has its own fields!
This will cause problems with pseudo-hashes.
Be sure you use base BEFORE declaring fields
WARN
<

ちなみにエラーがでていたコードは上の部分で「with pseudo-hashes」の部分を削除すれば5.8.5でもテストに通りました。

2004年11月11日木曜日

Foo-conf.plの使い方

SledgeでConfigファイルを読み込む際、環境変数SLEDGE_CONFIG_NAMEが設定されていないと、/etc/Foo-conf.pl(Fooはプロジェクト名)というファイルが実行されるんですが、このファイルには接直SLEDGE_CONFIG_NAMEを設定するような記述を書いておくんだそうです。具体的には以下のような記述を書いておきます。
>

$ENV{SLEDGE_CONFIG_NAME} = 'staging';
1;
<

またhttpd.confに以下のような記述を書くことで同様のことを実現できます。

>

PerlSetEnv SLEDGE_CONFIG_NAME production
<

こちらを使う方がなにかと便利なので、実際にはFoo-conf.plを作成することはほとんどないかもしれませんね。

実はFoo-conf.plが何に使われるのかわかっていなくて、miyagawaさんに直接聞いてしまったんですが、Sledge::Doc::Installにこのファイルに関することが書いてあったのに後で気づきました。。Docに書いてあるのに親切に答えて頂いたmiyagawaさん、ありがとうございました。感謝です。


Template::Plugin::Dumper

search.cpan.org: Template::Plugin::Dumper - Plugin interface to Data::Dumper

テンプレート内のパラメータをダンプするためのTTプラグイン。TT標準のプラグインなのに今まで使ったことありませんでした。普段はwarn Dumperで事足りるんですが、テンプレート内で演算なんかしたときのデータを確認したいときなんかに使えますね。というか今までこのプラグインに気づかなくてうかつ。


2004年11月5日金曜日

最もセキュアなOSはBSDとMac OS X

ITmedia エンタープライズ:最もセキュアなOSはBSDとMac OS X――mi2g調査

最もセキュアなOSはBSDとMac OS X。これって単純に普及してないからねらわれにくいってのもあるんじゃないですかねー。それにもっと重要なのはサーバの管理をどれだけちゃんとやるかってことだと思います。


2004年11月4日木曜日

コメントスパム対策をしました。

数日前にコメントスパム対策としてmt-comment.cgiの名前を変更したんですが、全く効果がなかったので、別の対策を行うことにしました。

他のブログはどんな対策をしているかみてみると、
-TypeKeyを使う
-連続投稿できる間隔を設定
-日本語が含まれていないコメントをブロック
-BanリストによるIP制限
というような方法が一般的みたいです。それぞれの方法をみてみると、TypeKeyは普通にコメント書きたい人にも一手間かけてしまうのがちょっとと思うし、連続投稿できる間隔の設定というのも一回は書き込まれてしまうし、Banリストは作成するのがめんどいしということでいまいち。

そこで今回は日本語が含まれていないコメントをブロックするという方法を少し発展させて全角ひらがなが連続するm文字が、n箇所以上無いコメントはスパムとみなすという対策をとることにしました。

今回修正したファイルはMT::App::CommentsとMT::L10N::jaの2つです。モジュールを直接いじるとMTをバージョンアップするときなんかに困ることになりそうなんで、プラグインとして書こう思ったんですが、プラグインの作り方を調べるのがめんどくさくなって、直接修正に妥協しちゃいました。。

この修正で、ひらがなが3文字連続している部分が2箇所以上ないコメントをPostした場合、エラーメッセージを表示するようになりました。軽くテストしましたがきちんと動いているみたい。

以下のコードをMT::App::Commentsのpostメソッドの上の方に追加し、MT::L10N::jaの%Lexiconに日本語エラーメッセージを追加しました。

>

my ( $m, $n ) = ( 3, 2 ); # ひらがなの文字数, 出現する回数

my $enc = $app->{cfg}->PublishCharset || '';
my $text = MT::I18N::encode_text($q->param('text'), $enc, 'euc');

my @count = $text =~ /(?:\xA4[\xA1-\xF3]){$m,}/g;
return $app->handle_error($app->translate(
"Your comment looks like a spam.[_1][_2]", $m, $n ))
if $text ne "" && scalar (@count) < $n;
<




2004年11月2日火曜日

DBD::mysql2.9005_3

DBD::mysqlがバージョンアップしたみたいです。変更点はこんな感じです。

-DBI1.43が必要になった。
-$dbh->last_insert_id()が使えるようになった。
-mysql_unsafe_bind_type_guessingオプションをセットすると数字っぽいスカラー値を数字として扱い、クオートしない。(自己責任で使ってね。)
-最近のmysqlでカラムが壊れるのを修正した。
-Makefile.PL実行時、5.008ではLANGがCに設定されてない場合、文句を言ってCに変えまて実行します。

うーむ、カラムが壊れるって何でしょうか。。

以下実際のChangelogです。

>>
2004-10-27 Rudolf Lippan (2.9005_3)

-Removed requirement that mysql.mtest be included in the distribution.

-DBI 1.43 is required -- It is needed for support of $dbh->last_insert_id().

-Added $dbh->{mysql_unsafe_bind_type_guessing} = 2 which will look at each bind_param and make guess based on whether it looks like a number, and if the parameter looks like a number, it will not be quoted. [thanks to dragonchild for cleaning up the initial rough draft impementation making it ready for prime time]

-Applied patch to fix column which broke with later version of mysql [Tim Bunce]

-Merged $dbh->last_inert_id() from the 3.0 dev tree

-If you are using perl 5.008 without a $ENV{LANG} of "C". Makefile.PL will now 1. Complain loudly, and 2. set LANG to "C" and then exec itself with the new lang setting.

-Added '$dbh->{mysql_unsafe_bind_type_guessing}'. When this flag is enabled any scalar that is passed to execute() and was used innumeric context will be treated as a number when being sent to the database backend. This can be a secuity problem in that if you use a string in numeric context, it will NOT be quoted before being passed to the database -- use at your own risk. The default is off.

-fixed typo in pod changing failed_auto_reconnects_failed to auto_reconnects_failed [Paul DuBois ]

<<




2004年11月1日月曜日

[求人] WEBプログラマ(Perl)を募集しています。

僕の働いている会社でperlプログラマを募集しています。平均年齢が若く、おもしろい意見なら誰の意見でも取り入れられるような働きやすい職場だと思います。一緒にWebアプリケーション開発してみませんか?興味を持たれた方はお気軽にご連絡下さい。

-職種
--WEBプログラマ(Perl)

-雇用形態
--正社員

-応募資格
--18歳~30歳くらいまで

-必須のスキル
--プログラミングが好きだ
--Perlを使ってWEBアプリ(掲示板など)を開発したことがある
--UNIXのコマンドをある程度理解している
--基本的なHTMLを理解している

-歓迎するスキル
--DB(MySQL、PostgreSQL)を扱える
--mod_perlを利用した開発経験がある
--Sledgeを利用した開発経験がある
--自宅でサーバを運用している

-仕事内容

--自社のASPサービス開発、運用やシステムの受託開発など。1プロジェクト当たり、1人もしくは2人程度でPerl,DBを駆使した開発を行います。主な開発環境はLinux+Apche+mod_perl+MySQLです。スキルアップに貪欲で、責任をもって業務に取組んでくださる方からのご応募をお待ちしております。

-勤務時間
--フレックス制 コアタイム 11:00~17:00

-待遇
--月20万円~(年齢・能力・経験を考慮の上、面談により決定)
--交通費全額支給
--完全週休2日制(土・日)

-勤務地
--東京都目黒区(東急東横線中目黒駅徒歩1分)
--株式会社ブイキューブ

-連絡先
--horiuchi@vcube.com




2004年10月29日金曜日

Microsoft Wireless Notebook Optical Mouse マイカブラック

Microsoft Wireless Notebook Optical Mouse マイカブラック
マイクロソフト (2004/10/29)
売り上げランキング: 73
通常24時間以内に発送


レシーバをマウス本体に収納できるってところがいい!

Gmailでinvitation送れるようになりました。

今日も何気なくGmailを使っていたら、いつの間にか他の人を招待できるようになってました。意外とすぐに招待出来るようになってびっくりです。
何通かはもう送ってしまいましたがあと3人招待できるので、Gmailのアカウントがほしい人がいましたらこのエントリーにコメント下さい。

先着でinvitation送ります。

追記
invitation終了しました。

2004年10月28日木曜日

MySQL4.1.x系がstableに

MySQL4.1.7がリリースされました。これをもって、4.1.xがstableになったそうです。ダウンロードページでも4.1がrecommendedになってました。



2004年10月26日火曜日

電池が必要ないワイヤレス光学式マウス!?

ITmedia PCUPdate:電池が必要ないワイヤレス光学式マウス登場という記事を見つけた。いつのまに電力を無線でとばせるようになったんだ!?ノーベル賞か!?なんて思って読み進めていると

>>
このNB-30JPは、専用の送受信機兼マウスパッドとセットで使用するようになっている。同社説明員によると「世界初の最新技術で特許申請中」だというRFID-Padを利用して、ワイヤレス通信とマウス動作に必要な電力をマウス本体に供給する仕組みとなっているようだ。
<<

マウスパッドから電力を供給しているんですね。さらに

>>
こういった感じで専用マウスパッド上で動作する。そのためマウスパッドから数センチ浮かせただけでも動かなくなる
<<

マウスパッドから離すと動かなくなるんですね。。微妙に使えないような。。



2004年10月25日月曜日

sukerokuプラグインをテストしてみる

最近はてなの本に影響されて、はてなダイアリをこっそりはじめてみたんですが、*を先頭につけたら見出しになるとか、-とか+でリストを書けるというような、はてなダイアリの日記を書くためのルールがすごく便利でこれをMTでも使えないかなーと思ってググってみたらやっぱりありました。

ささやかなる実験場の開発室(HSJ.jp): MovableType用TextFormatプラグイン mt-sukeroku-plus.pl Ver.1.00公開

早速導入してみました。以下そのテストです。

* sukerokuプラグインをテスト

-リストです
--リストの中身1
--リストの中身2

[google:MT はてな プラグイン]


2004年10月24日日曜日

DBDesigner4

フリーのデータベースのモデリングツールDBDesigner4を試してみました。かなりいい感じです。気に入った点は

-直感的に使える。
-動作が軽快(テーブル定義しまくるとちょっと重くなるが許容範囲)
-リバースエンジニアリングできる。(MySQLのみ。PostgreSQLで出来ないのは残念)
-HTML出力ができる(仕様書代わりになりそう)
-保存形式がXMLなので他のアプリで使い回せそう。

しばらく使ってみようと思います。





2004年10月22日金曜日

mod_perl使用時はMaxClientsの値に気をつけましょう


導入するだけで既存のCGIスクリプトがお手軽に10~200倍高速になるmod_perlですが、mod_perl自体がサイズがでかいのと、高速化のため、モジュールをキャッシュするため、apacheのプロセスサイズが結構大きくなってしまいます。経験的にはだいたい1プロセスあたり20~30MByte位にはなります。このような性質上、mod_perlを使う場合はメモリの使用量を考えなくてはいけません。


ところで、Apacheのデフォルトの設定ではMaxClientsの値は150に設定されています。これは同時に最大150のリクエストをさばく、つまり最大150まで子プロセスを同時に生成するということです。仮に150個の子プロセスを生成するとすると、mod_perlを利用時の1プロセスのサイズをおよそ20Mbyteとすれば20×150=3000[MByte]=3[GByte]のメモリを必要とすることになります。この場合、スワップ領域を含めてメモリの容量が3[GByte]に満たないサーバはすべてメモリを使い切り、最悪落ちることになります。


ということでほんとに落ちるかどうか実際に試してみました。
方法はApache付属のベンチマークツールabを使い同時アクセス数100、で1000回のリクエストを送るというものです。


ab -c 100 -n 1000 -k http://targetsite.hostname/

対象サーバのスペックはCPU:Pentium3の600MHz、メモリ:512MByte、スワップ領域は1GByteです。


結果はというと、、abはタイムアウトで測定不能となりました(当たり前)。さらに、ab終了後のサーバにも問題が。。サーバが落ちることはなかったんですが、abはタイムアウトで終了しているのにめちゃめちゃサーバのレスポンスが悪くなってしまいました。sshでの接続にも数十分かかる始末。やっとの事でログインし、Apacheを終了させるとようやくレスポンスが生き返りました。


結論、mod_perlを使うときはMaxClientsの値に注意しましょう。Apacheのデフォルト設定で運用すると最悪サーバが落ちます。MaxClientsの値は「サーバのメモリ容量 / Apacheの1子プロセスのサイズ」でおおざっぱに計算できます。今回試したサーバでは512/20=25位に設定しておけば、メモリを使い切ってサーバが落ちる危険がなくなります。




Gmailに転送したらピンポン


以前から使ってみたいなーと思っていたGmailですが、先日kaoponさんにinvitationを頂き、ついにアカウントを手に入れました!快くinvitationを送っていただいたkaoponさん、どうもありがとうございました!


僕は普段Becky+IMAPでメールをみているんですが、メールの検索が遅くて困るんです。そこでGmailにもメールを転送して、検索はGoogleの強力な検索機能を利用しようと考えました。さっそく.procmailを編集しGmailにも転送するように設定しました。しばらくは問題なく動いていたんですが、少ししたら、あやしい添付ファイル付きのメールがピンポンしはじめました。。ピンポンしているメールをみてみるとerror reason: 552 Illegal Attachment のような記述が。。どうやら、Gmailは怪しい添付ファイル付きのメールを
はじき返すみたいです。はじき返したメールがまたGmailに転送されてまたはじかれる、、そうやってピンポンしてたんですね。


対策としてとりあえず、PostmasterとかMailer-DaemonからくるメールはGmailに転送しないように設定しておきました。これで今のところ、うまくいっているみたいです。




2004年10月20日水曜日

MT3.1にアップグレードしたけど、、

MTを3.1にアップロードしてみたところmod_perl環境で動かなくなっちゃいました。。エラーログとソースを眺めてみると、なんかApache:::Requestのオブジェクトができてないっぽいです。。原因究明する時間がないのでとりあえずCGI環境で動かすことにします。。

2004年10月19日火曜日

ゴッゴル

第 1 回 SEO コンテストが開催されている。「ゴッゴル」という単語で検索して一番上に表示された人が優勝!海外で行われたSECコンテストでは指定された単語を使ってエントリーを書いただけで優勝したっていってたので、意外と上位に食い込んだりしないかなー。

いやー、今日はなんだかんだで7ゴッゴルは稼げましたよ。あそこで滑った時には今日は2ゴッゴル止まりかとひやっとしましたが最後のジャンプで4ゴッゴル出せたのがよかったです。あのとき滑らなければ久しぶりに10ゴッゴル越えがねらえたんですけどねー。残念。

無駄にゴッゴルってみました。



2004年10月18日月曜日

無線LANルーター(WHR3-AG54/P)を購入

昨日買ってきた無線LAN機器からアクセスできるようにと、久しぶりに自宅の無線LANアクセスポイントの設定を変更したら、書き込みに失敗したのか、全く無線LANを使えなくなってしまいました。。電源を抜き差ししてみたり、初期化ボタンをおしてみたり、一通りのことはしてみましたが、症状全く変わらず。。修理に出しても時間もお金もかかるし、なにより今のは11bにしか対応していない古いものなので、これを機に新しく買うことにしました。

とりあえず、kakaku.comで調べてみると、WHR3-AG54/Pという製品が人気があって、値段も手頃でよさそう。このとき一番安い店はPC-Successだったのでのぞいてみると、たまたまWHR3-AG54/Pがタイムセール中!限定10台¥10,980で売り出されてました!これを逃す手はないと即購入しちゃいました。

商品が届くのが楽しみです!



2004年10月17日日曜日

2004年10月16日土曜日

Sledge::Template::TT::Shift_JIS - テンプレートファイルをShift-JISでかけるようにする

Sledgeは出力するコンテンツがShift-JISの場合でもテンプレートはEUC-JPで書く仕様になっています。
僕の会社では基本的にHTMLの文字コードはShift-JISということになっているのでコーダーからあがってくるHTMLは当然Shift-JISです。なのでこれをテンプレート化するにはパラメータの埋め込みの他、文字コードをEUC-JPに変換をしなければなりません。一括変換すればすむ話ですが、それがちょっとめんどくさい(笑)

ということで、テンプレートをShift-JISで書くためのSledge::Template::TTのサブクラス、Sledge::Template::TT::Shift_JISを作ってみました。使い方は簡単でPagesクラスで、

use Sledge::Template::TT;
と書いているところを
use Sledge::Template::TT::Shift_JIS;
に変更するだけです。

Sledge::Template::TT::Shift_JISのコードはこんな感じです。

package Sledge::Template::TT::Shift_JIS;

use strict;
use vars qw($VERSION);
$VERSION = '0.01';

use base qw(Sledge::Template::TT);

use Template;
use Sledge::Exceptions;
use FileHandle;
use Jcode;

sub output {
my $self = shift;
my %config = %{$self->{_options}};
my $input = delete $config{filename};
my $template = Template->new(\%config);
unless (ref($input) || -e $input) {
Sledge::Exception::TemplateNotFound->throw(
"No template file detected: $input",
);
}
my $text = do { local $/; my $fh = FileHandle->new($input); <$fh> };
$text = Jcode->new($text, 'sjis')->euc;
$template->process(\$text, $self->{_params}, \my $output)
or Sledge::Exception::TemplateParseError->throw($template->error);
return $output;
}

1;
最初は下のようなコードを書いたんですが、テンプレートのオプションのfilenameがスカラーリファレンスだとSledge::Tempate::TTのリビジョンが1.3より以前のものでは動かないことに気づいて、Sledge::Tempate::TTのコードをそのまま借りてきて、文字コード変換を差し込んだ結果、上のようなコードに落ち着きました。
package Sledge::Template::TT::Shift_JIS;

use strict;
use vars qw($VERSION);
$VERSION = '0.01';

use base qw(Sledge::Template::TT);

use FileHandle;
use Jcode;

sub output {
my $self = shift;
my %config = %{$self->{_options}};
if ( -e $config{filename} ) {
my $text = do { local $/; my $fh = FileHandle->new($config{filename}); <$fh> };
$text = Jcode->new($text, 'sjis')->euc;
$self->set_option(filename => \$text);
}
$self->SUPER::output;
}

1;



2004年10月15日金曜日

Google Desktop Search

Google Desktop Search のベータ版がダウンロード出来るようになったので、僕も早速ダウンロードして、インストールしてみました。

Google Desktop Searchとは、簡単に言えば自分のパソコン内のファイルに対してGoogleを使った検索を行うためのツールです。現在検索の対象となるファイルはOutlook、OutlookExpressのメール、AOLメッセンジャーのチャットの内容とか、エクセル、ワード、パワーポイント、テキストファイル、Webの履歴だそうです。

ちょっと使ってみましたが、エクセルとかパワーポイントの検索が熱いですね。ローカルファイルを高速に検索できますし、日本語も使えますし、かなりいい感じです。

どこにファイルを保存したかをすぐに忘れてしまうB型の僕にとってはまさに救世主の登場です。



2004年10月14日木曜日

Sledgeでセッションを使わないとき

Sledge::Doc::FAQにも書いてあるようにセッション管理が必要ない場合はconstruct_sessionを空のメソッドでオーバーライドすればいいのですが、さらにcreate_managerも空メソッドでオーバーライドしておけば、SessionManagerもuseしなくてすみます。これでほ~~んのちょっぴりメモリが節約できます。

ドラクエ8予約受付中

ドラゴンクエストVIII 空と海と大地と呪われし姫君
スクウェア・エニックス (2004/11/27)
売り上げランキング: 1
近日発売 予約受付中

Amazonでドラクエ8の予約を受付中です。15%OFFの¥7,854円で買えるみたい。さらに300円キャッシュバックらしいので、実質¥7,354てことですね。



2004年10月9日土曜日

Error.pmのtry~catch

2002年 10月  さらにもう一個。perlでtry~catch構文。Error.pmでどうやってるのかと不思議だったんだけど、謎が解けた。 try { ... } catch { ... };  中カッコは無名サブルーチン、catchはサブルーチンへのリファレンスを受け取ってそのまま返すだけのサブルーチン、tryは無名サブルーチンを二つ取るサブルーチン。なるほど、perlの文法で書けてるわけね。

2004年10月5日火曜日

筋肉痛

昨日電車に遅れそうだったので、駅まで走ったら若干筋肉痛になった。。なんか運動しないとやばい!?



2004年10月4日月曜日

高品質なWebアプリケーションの開発手法

ここ最近、高品質なWebアプリケーションを効率よく開発するにはどうしたらいいかということを真剣に考えています。というのも、今まで構築してきたシステムにプログラムのバグが立て続けに発生するようになってきたためです。今までのプログラマ個人主義の開発体制の限界がきたのかもしれません。この問題を解決するために、まずはシステムになぜバグが発生したのか、その原因を把握することから始めたいと思います。

ケース1: 単純にテストが足りない

ユーザは時として、プログラマが予測しないようなデータを入力してきますし、XSS、SQLインジェクションなどをねらった悪意あるデータを入力される可能性もあります。それらの想定される様々な入力に対して十分なテストが行われていないと、一見正常に動いているように見えても、後々バグが見つかるということになってしまいます。また、システムのあまり重要でない機能に多いのですが、単純にプログラムのアルゴリズムが間違っていたなんていうはずかしいバグもありました。

ケース2: 長期の継続的な追加開発によるシステムの破綻

何の開発手法も確立していない状態で、数年にわたりシステムを継続的に開発していくと、コードはスパゲティのように複雑に絡み合い、あるバグの修正が別のバグを引き起こすというようなひどい状況になりえます。また、数年前のプロジェクトということもあり、ソースコードの管理がきちんと行われていなかったりして、修正したつもりがデグレードというような恐ろしいことも起こりえます。このケースではクライアントさんとの付き合いも長くなっているので、問題は深刻です。

ケース3: 開発担当者はもういない

古いプロジェクトになるとそのシステムを開発した人間がすでにいなくなっているケースです。バグが発生したときには仕方なく今いる人間が、ソースコードを読み直し、システムの内容を把握、そして修正を行わないとなりません。コーディング規約などが整備されていないため、なれない人間だとソースコードの解読にかなりの時間を要します。そしてこのような非建設的な事柄に貴重な時間を浪費してしまいます。

問題可決には何をすべきか

こうやって、失敗したケースを並べてみると何をしたらいいのか何となく見えてきます。おおざっぱにまとめると以下のような感じでしょうか。

  • テスト方法の整備
  • コーディング規約の整備
  • ドキュメントの整備

ではこれらをどう実践していくかということですが、XP(エクストリーム・プログラミング)という開発手法を応用することで、うまくいきそうな気がします。XPというとペアプログラミング、テストファーストという言葉がすぐ浮かんでくるんじゃないかと思いますが、物事をできるだけシンプルに考えようという姿勢が僕は好きです。また、開発速度が上がることも期待できそうです。開発速度について、はてなのnaoyaさんのWeblogには以下のように書かれています。

はてな はまぞう - ASIN リンク支援ツールの開発裏話 : NDO::Weblog

フレームワークを使って、もう一人のエンジニアとのペアプログラミング。毎朝にスタンディング・ミーティング(立って会議)をして仕様を策定し、二日ちょっとで作り上げました。やろう、と決めてから三日以内にリリースというスピードは、Perl フレームワークと、XP のいいとこ取りをした開発スタイルに依るところが非常に大きいです。

XPとフレームワークを利用して、3日で機能を開発したそうです。他にもXPを導入している会社の話をちらほらと聞きますし、どうやらWebアプリケーション開発にXPが有用なのは確かなようです。

それではXPを使うと先ほどのケースはどのように解決できるでしょうか?

ケース1: 単純にテストが足りない。

これを解決するためにはテスト方法を整備しなければなりません。XPではテストを機能テスト、単体テストの2つに分けて行います。機能テストはユーザ(クライアント)がこのように動いてほしいと思った通りの挙動を示すかのテストで、単体テストはプログラム内の各オブジェクトのメソッドが期待通りに動くかのテストです。前者はテストの性質上、ユーザ側に行ってもらうのが理想です。といってもクライアントによってはWebの知識があまりない場合も多いので現実的にはディレクタがユーザと話し合ってテストケースを決めるという形になるでしょうか。また、後者の単体テストはプログラマの仕事になります。ここで重要なのがテストもプログラミングするという点です。テストスクリプトを作成し、残しておくことで繰り返しテストを行うことができますし、様々な良い副作用も期待できます。これらの2つのテストをきちんと行うことで、バグはグンと減ると考えられます。また、ペアプログラミングを行い、もう一人の人間がテストケースを考えるというようにすれば、さらにバグの比率は減るでしょう。

ケース2: 長期の継続的な追加開発によるシステムの破綻

XPを使うことで、このケースも失敗のリスクを減らすことができます。機能を追加するごとに単体テストを行うことを義務づけます。テストはテストスクリプトとして残っているため、それを毎回実行することで、ある機能を実装したおかげで別のところにバグが生じた場合も事前にそれを見つけることができるようになります。また、CVSなどのリソース管理システムを導入し、リソースを管理することでデグレードの危険を回避します。

ケース3: 開発担当者はもういない

これを解決するにはドキュメントの整備が必要ですが、得てしてプログラマはドキュメントを書くのが嫌いです(偏見?)。XPでは単体テスト用に書いたテストスクリプトがそのままドキュメントになり得ます。メソッドがどのような振る舞いを期待されているかがテストをみればわかります。プログラマにとっては文章でまとめられたドキュメントよりもこちらの方がシステムを理解するのに役立つのではないでしょうか。また、もういない誰かが書いたテストケースをすぐに実行できます。自分の修正が正しいのかもそれで確認ができます。自分のせいでシステムが壊れていないかも確認できます。テストスクリプトを書くということにはこのような副作用もあるんです。

XPをいきなりどかんとすべて導入というのはちょっと無理があるので、まずはコーディング規約の整備、単体テストの義務づけあたりからやっていこうかと思います。



ブログを借りる前にここを読め。

まあ待て、ブログを借りる前にここを読め。

タイトル通りブログを借りる前に読むブログです(笑)。各レンタルブログの情報が詳しく載っていて非常に参考になります。おそおそランキングはサービス提供者にとっては嫌でしょうねー。。



BloglinesがWebサービスを公開

旅行にいっている間にBloglinesがWebサービスを公開してました。さらにmiyagawaさんがすでにこのWebサービスを簡単に利用するためのperl用API、WebService::Bloglinesを公開してました。早すぎ。。

2004年10月3日日曜日

帰国しました。

新婚旅行から帰ってきました。ギリシャに行ってきたんですが噂通りご飯はあんまりおいしくありませんでした。でもムサカという挽肉となすを使ったギリシャの代表的な料理とブドウはおいしかったです。それとサントリーニ島のイアという町の景色はすてきでした。白い建物と青い屋根がほんとにきれいな町で異国にきたなーと痛感できます(笑)。移動が多くかなり疲れた旅でしたがほんとに楽しかったです。

2004年9月21日火曜日

新婚旅行に行ってきます

結婚してからだいぶ日がたってしまいましたが、今日から10日間、新婚旅行に行ってきます。ギリシャです。ほとんど準備してないけど大丈夫かなぁ。。



2004年9月16日木曜日

Perlクックブック第2版

昨日参加したBlogHacksの発売記念イベントでPerlクックブック第2版が販売されていたので買ってきました。おまけとして、Tシャツとメモ帳がついてきて、書籍自体も10%割引だったのでかなり得した気分(笑)このPerlクックブック、新たにmod_perlとXMLという章がが設けられ、Vol1,2の2冊に分けられました。Perlを使ってこんなことやりたいと思ったときはこの本をめくると結構そのものズバリが書いてあったりして、かなり役立つ本だなという印象です。輪講のテキストにもいいかもと思ったり。

Perlクックブック〈VOLUME1〉
トム クリスチャンセン ネイザン トーキントン Tom Christiansen Nathan Torkington Shibuya Perl Mongers ドキュメントシステム
オライリージャパン (2004/09)
売り上げランキング: 14,017
通常2~3日以内に発送します。
Perlクックブック〈VOLUME2〉
トム クリスチャンセン ネイザン トーキントン Tom Christiansen Nathan Torkington Shibuya Perl Mongers ドキュメントシステム
オライリージャパン (2004/09)
売り上げランキング: 13,130
通常2~3日以内に発送します。


2004年9月15日水曜日

Amazon雑誌コーナー

Amazon.co.jp:本 / 雑誌

アマゾンで雑誌が買えるようになったみたい。



2004年9月14日火曜日

MIME::Lite::TT::Japanese 0.04

MIME::Lite::TT::Japaneseを0.04にバージョンアップして、CPANにアップロードしました。
変更点は以下の通りです。

  • perl5.8.0以上でもMIME-HeaderのエンコーディングをUTF8からISO-2022-JPに変更した。
  • それに伴って5.8.0以上でもJcodeを必須モジュールとした。

今までは楽をしてperlのバージョンが5.8.0以上の場合、Encode.pmのEncode::MIME::Header を使っていたので、MIME-HeaderのエンコードがUTF8でしたが、携帯のメーラなどがUTF8にエンコードされたヘッダを解釈できないので、Jcodeを利用してISO-2022-JPにエンコードするようにしました。



2004年9月13日月曜日

CoQ10

「こえんざいむきゅーてん」略して「こーきゅーてん」と読むそうで、老化を防いだり、肌を美しく変えてくれたり、とにかく体のいろんなところに効果があるらしい。体内に存在しているが20才をピークにどんどん減っていくそう。1日に必要な量は100mg程度でこれを摂取するには肉なら3kg、ブロッコリーだと12kgも食べないといけないんだって。こうなるとサプリに頼らないと必要量は摂取できなそうですね。サプリってなんか人工的でかえって体によくないんじゃないかっていう先入観があるんですが、これはとってみてもいいかも。

ラストサムライがPS2で見れない

週末に見ようと「ラストサムライ」をTSUTAYAで借りてきたんですが、僕のPS2ではディスクを読み取れなくて再生できませんでした。。ちょっとググってみたところ同じように再生できない人もいるし、できてるひともいるみたい。むむむ。

2004年9月10日金曜日

Perlモジュールのバージョン確認

たとえばこのサーバにインストールされているCGI.pmのバージョンを確認したいなんて時は

perl -MCGI -e 'print $CGI::VERSION'

なんてコマンドを打ってやれば確認できますが、これをいちいち打つのはめんどくさいので、簡単なスクリプトを書いてみました。

#!/usr/bin/env perl
use strict;
use File::Basename;
use Getopt::Std;

getopts('v', \my %opt);

die "Usage: ". basename $0. "[-v] [ ...]\n"
if @ARGV == 0;

no strict 'refs';

for (@ARGV) {
(my $path = $_) =~ s{::}{/};
eval {require "$path.pm"};
if ( $@ ) {
print "$_: not found.\n" if $opt{v};
} else {
print "$_: ", ${join '::',$_,'VERSION'}, "\n";
}
}




2004年8月16日月曜日

続・君ならどう書く?(Sledgeを使って作ってみました。)


君ならどう書く?(Sledgeを使って作ってみました。)というエントリーを書いたらmiyagawaさんからコメントが!「ソース!」ということなので、ソースを公開してみます。確かにソース公開しなきゃ何の意味もないですもんね(苦笑)



今回はsledge-setupで生成されるLLW::Pages、LLW::Config、LLW::Config::_common以外に、ロジック部分のLLW::Pages::Index、カレンダーを表すLLW::Calendar、スケジュールを表すLLW::Scheduleという3つのクラスを作りました。テンプレートはindex.html一枚で、トリガ用CGIはスケジュール表示、登録用のindex.cgiと削除用のdelete.cgiを作成しました。入力データのバリデーションは時間の都合上やってません(笑)それぞれのソースは以下の通りです。



LLW::Pages::Index



Pagesクラスを継承した今回の核となるクラスです。



package LLW::Pages::Index;
use strict;
use base qw/LLW::Pages/;
__PACKAGE__->tmpl_dirname('llw');
use LLW::Calendar;
use LLW::Schedule;
use Date::Simple;
# カレンダー、スケジュールの表示
sub dispatch_index {
my $self = shift;
my $year = int $self->r->param('year');
my $month = int $self->r->param('month');
my $day = int $self->r->param('day');
my $calendar = LLW::Calendar->new($year, $month) || LLW::Calendar->new;
my $date = Date::Simple->new($year, $month, $day) || Date::Simple->new;
my $schedules = LLW::Schedule->search(schedule_date=>$date,
{order_by=>'schedule_timestamp'} );
$self->tmpl->param( date=>$date, calendar => $calendar ,schedules => $schedules );
}
# スケジュールの登録
sub post_dispatch_index {
my $self = shift;
my $year = int $self->r->param('year');
my $month = int $self->r->param('month');
my $day = int $self->r->param('day');
my $title = $self->r->param('title');
my $content = $self->r->param('content');
my $date = Date::Simple->new($year,$month,$day);
eval {
my $schedule = LLW::Schedule->create({
schedule_title => $title,
schedule_content => $content,
schedule_date => $date
});
};
$self->tmpl->param(create_error=>1) if $@;
my $uri = sprintf 'index.cgi?year=%d&month=%d&day=%d', $year, $month, $day;
$self->redirect($uri);
}
# スケジュールの削除
sub dispatch_delete {
my $self = shift;
my $schedule = LLW::Schedule->retrieve(int $self->r->param('id'));
$schedule->delete if $schedule;
my $year = int $self->r->param('year');
my $month = int $self->r->param('month');
my $day = int $self->r->param('day');
my $uri = sprintf 'index.cgi?year=%d&month=%d&day=%d', $year, $month, $day;
$self->redirect($uri);
}
1;

LLW::Calendar


カレンダーを表すクラスです。拙作のDate::Simple::Monthというモジュールのサブクラスとして定義しています。Date::Japanese::Holidayをuseすることで、各日にちでis_holidayメソッドを利用可能にしています。



package LLW::Calendar;
use strict;
use base qw/Date::Simple::Month/;
use Date::Japanese::Holiday;
1;

LLW::Schedule


スケジュールを表したクラスです。Class::DBIのサブクラスになっています。今回はスケジュールを保存するためにmysqlを使いましたので、保存用のテーブルのスキーマも書いておきました。



package LLW::Schedule;
use strict;
use base qw/Class::DBI/;
use LLW::Config;
my $config = LLW::Config->instance();
__PACKAGE__->set_db('Main', @{$config->datasource}, {RaiseError=>1});
__PACKAGE__->columns(Primary=>'schedule_id');
__PACKAGE__->columns(Essential=>qw(schedule_date schedule_title schedule_content));
__PACKAGE__->columns(OTHERS=>qw(schedule_timestamp));
__PACKAGE__->has_a(schedule_date=>'Date::Simple');
1;
__END__
CREATE TABLE schedule (
schedule_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
schedule_date DATE NOT NULL,
schedule_title TEXT NOT NULL,
schedule_content TEXT,
schedule_timestamp TIMESTAMP
);

index.html



テンプレートです。実はここに一番時間をかけていたりします(笑)



<html>
<head>
<title>llw scheduler</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<style type="text/css">
<!--
.weekday { color: #999999; }
.holiday { color: red; }
.today {background-color: yellow;}
.content { color: #999999; }
-->
</style>
</head>
<body>
<div id="calendar">
<table border="1" cellpadding="1" cellspacing="0">
<caption>[% calendar.year %]年[% calendar.month %]月</caption>
<tr>
<th>日</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th>土</th>
</tr>
[% FOREACH d = calendar.wraparound_dates %]
[% IF loop.count % 7 == 1 %]<tr>[% END %]
<td>
[% IF d.month == calendar.month %]
<a class="[% IF d.is_holiday %]holiday[% ELSIF d == today %]today[% ELSE %]weekday[% END %]"
href="index.cgi?year=[% d.year %]&month=[% d.month %]&day=[% d.day %]">[% d.day %]</a>
[% ELSE %] [% END %]
</td>
[% IF loop.count % 7 == 0 %]</tr>[% END %]
[% END %]
</table>
<a href="index.cgi?year=[% calendar.prev_month.year %]&month=[% calendar.prev_month.month %]&day=[% date.day %]">前月</a>
<a href="index.cgi">今月</a>
<a href="index.cgi?year=[% calendar.next_month.year %]&month=[% calendar.next_month.month %]&day=[% date.day %]">来月</a>
</div>
<h3>[% date.year %]年[% date.month %]月[% date.day %]日の予定</h3>
<form action="index.cgi" method="post" name="" id="register_form">
タイトル<br>
<input name="title" type="text" id="title">
<br>
内容
<br>
<textarea name="content" id="content"></textarea>
<br>
<input type="submit" value="予定を追加">
<input name="year" type="hidden" id="year" value="[% date.year %]">
<input name="month" type="hidden" id="month" value="[% date.month %]">
<input name="day" type="hidden" id="day" value="[% date.day %]">
</form>
[% IF create_error %]データの登録に失敗しました。<br>[% END %]
<div id="schedule">
[% WHILE (s=schedules.next) %]
<div class="title">・[% s.schedule_title|html %] [<a href="delete.cgi?id=[% s.id %]&year=[% date.year %]&month=[% date.month %]&day=[% date.day %]">削除</a>]</div>
<div class="content">[% s.schedule_content|html|html_line_break %]</div>
[% END %]
</div>
</body>
</html>

index.cgi、delete.cgi


トリガ用CGIです



#! /usr/local/bin/perl
use strict;
use LLW::Pages::Index;
LLW::Pages::Index->new->dispatch('index');


#! /usr/local/bin/perl
use strict;
use LLW::Pages::Index;
LLW::Pages::Index->new->dispatch('delete');

MIME::Lite::TT


MIME::Lite::TTMIME::Lite::TT::JapaneseというPerlモジュールを作ってみました。


僕がPerlでメールを送信するプログラムを書くときはMIME::Liteをよく使うんですが、そのとき、メールの本文はテンプレートにしておいて、Template::Toolkitで読み込むなんてことをよくやります。メールを送信するという機能はWebアプリを作る際には必ずといっていいほどついてくるものなので、毎回、同じようなコードを書かなくてはなりません。それがめんどくさくなって少しでも簡単にかけるようにとこのモジュールを書いてみました。MIME::Lite::TT::Japaneseの方は日本語のエンコード部分がちょっとあやしいので、使って頂いてフィードバックもらえたらうれしいです。

2004年8月9日月曜日

君ならどう書く?(Sledgeを使って作ってみました。)

Lightweight Language Weekendの「君ならどう書く」のお題はこんな感じ。

  • カレンダーを表示すること

  • その月だけでなく、前後の月にも移動できること

  • カレンダーの日にちを指定して予定を入力/表示できること

  • あとの拡張は自由


WebアプリケーションといえばSledge。ということでSledgeとCPANモジュールをごりごり使ってさくっと作ってみました。


http://hori-uchi.com/llw


所要時間は1時間30分くらい。やはり典型的なWebアプリの開発にはSledgeは恐ろしく便利だと実感しました。



Lightweight Language Weekendに行ってきました

Lightweight Language Weekendというカンファレンスに参加しました。カンファレンスという堅苦しい雰囲気はなく、どのセッションも笑いが絶えない和やかな雰囲気で進行していき、参加していてとても楽しかったです。
特に、Lightning Talkでの早川さんのLL侍は会場中大爆笑で、僕も大笑いでした。たぶんLLWで一番印象に残ったのは?と聞かれたら、ほとんどののひとがLL侍というんじゃないでしょうか(笑)


まじめなところで行くと、Language Updateでは、今まで知らなかった言語をその動向とともに知ることができたのが非常に参考になったし、LLを仕事にするにはどうしたらいいかということに関して、いろいろな方の意見が聞けたのも非常に有益でした。僕はWebアプリケーションを作るのが主な仕事なので、Python、Zopeというのは一度さわってみたいなーと思いました。また、LLを生かせる場所ということについては、ASP型のサービスのシステム構築というのが一つの答えかなと感じました。はてなダイアリーの例を出すとPerlで書いているからこそ少人数でも次から次へと素早く機能を拡張していけるのだろうと思います。LLを仕事にのセッション中の会場ではLLは仕事にしにくいみたいな空気があったように思うんですが、Webアプリケーションということについて言えば、中小規模の会社のWebサイト構築なんかは高額なJAVAより安価に作れるLLを使った方が喜ばれる(というかお客さんにとっては動けば言語なんて何でもいいんですよね。。)と思うんですよね。儲かる儲からないは別ですが(笑)


こんな感じで、どのセッションもすごくおもしろかったんですが、一つだけ不満が。最後のセッション、その場でどう書くはお題がWebアプリケーションということもあって個人的にすごく楽しみにしていたんですが、参加者のみなさんのほとんどがWebアプリケーションなんて作ったことないよーとか久々に作るって方ばかり(笑)
僕としてはZopeだろうがCPANだろうが飛び道具何でもありで、こんなにも簡単にWebアプリが作れますというのを見たかったです。ただ、飛び入り参加の○○さん(名前は伏せてとおっしゃっていた気がするので○○さんとしました)のPerl標準関数のみを使って70行程度で書いたコードは流石だなと感心しました。



2004年8月5日木曜日

SledgeでのURLエンコード


GETリクエストの引数に日本語を渡したい場合、文字列をURLエンコードしなければなりませんが、Sledgeで、出力ページをEUC以外にしていると、URIエンコードにひと工夫必要になります。

出力ページがEUCの場合は、Template::Toolkitに標準でついているURIフィルターを使って


<a href="search?q=[% r.param('query')| uri %]">
検索結果のリンク</a>

こんな風に簡単にURLエンコードできますが、EUC以外の場合は単純に上のようにしても、文字化けが起こってしまいます。これは、Sldgeは内部で扱う文字コードをEUCに統一していて、外部からの入力データは受け取り時にEUCに変換され、コンテンツのアウトプット時にテンプレートの値が埋め込まれた完全なEUCのHTMLを作成してからそれを指定の文字コードに変換して出力しているためです。

このため、上記のような方法でURLエンコードを行うと、指定の文字コードに変換される前に、つまり、文字コードがEUCの状態でURLエンコードが行われてしまうため、おかしなことになってしまうのです。




この問題を回避するには、URLエンコードを行う前に指定の文字コードへ変換する必要があります。


<a href="search?q=[% r.param('query')| 文字コードの変換 | uri %]">
検索結果のリンク</a>


最初は自分で文字をエンコードするためのプラグインを書いて使っていましたが、CPANを探してみるとすでにいい感じものがありました。



Template::ToolkitでJcodeを利用可能にするためのプラグインです。時代はEncodeだと言われそうですが、utf8を扱わないのであれば、これで十分ですね。使い方はこんな感じです。


[% USE Jcode %]
<a href="search?q=[% r.param('query').jcode('euc').sjis | uri %]">
検索結果のリンク</a>




2004年7月30日金曜日

Blog Hacks アマゾンで予約開始

Blog Hacks-プロが使うテクニック & ツール 100選
powered by
amazlet
宮川 達彦 伊藤 直也
オライリー・ジャパン (2004/08/07)
売り上げランキング: 14
近日発売 予約可


予約せねば




2004年7月20日火曜日

Convert::SciEng

「1k」とか「1M」という文字列を数字として比較しその大きさでソートするプログラムを書く必要があったんですが、そういうことを考える人は他にも絶対いるはずで、となればCPANに便利がモジュールがあるだろうと探してみたら、やっぱりありました。

Convert-SciEng

こんな感じで使えます。

#! /usr/bin/env perl
use strict;
use warnings;
use Convert::SciEng;

my @data = qw(1K 3M 234 5.6G 3.43K);

my $cs = Convert::SciEng->new('SI');
@data = sort { $cs->unfix($b) <=> $cs->unfix($a) } @data;

print join "\n", @data;
print "\n";


結果

5.6G
3M
3.43K
1K
234




2004年7月19日月曜日

南国のフルーツタルト

040717_2247~01.jpg


会社で共有しているスケジュール表に自分の誕生日を書いておいたのが功を奏したのか(笑)、会社の皆さんに誕生ケーキを買って頂きました!スケジュール表に書いておきながら自分の誕生日をすっかり忘れていたのでケーキが登場したときにはちょっと感動しました。皆さんほんとにありがとうございましたー。

そんで次の日、早速いただいたわけですが、これがめちゃめちゃうまい!バナナもマンゴーもパイナップルも大好きなので、むしゃむしゃむしゃむしゃ、フォークが止まりません。気づいたら、奥さんと2人でホールの半分平らげてました(笑)



040717_2247~02.jpg



今日もさらに半ホール2人でぺろり。見事完食しました!ごちそうさま!


Movable Type 3.0 Developer Edition 日本語版にアップデート

Movable Type 日本語版サイト: Movable Type 3.0 Developer Edition 日本語版の提供を開始しましたということでMT3.0日本語版がリリースされたのでアップデートしました。基本的にファイルを上書きしただけですが、問題なく動いている模様。



2004年7月13日火曜日

ショコラオレ

040712_2007~01.jpg

セブンイレブン限定らしい「ショコラオレ」を食べました。味はパピコのチョココーヒーに近い感じ。さっぱり食べやすくておすすめです。


2004年7月9日金曜日

Bloglinesサイトリニューアル

Bloglinesがサイトをリニューアルしたようです。一昨日アクセスしたときはリニューアルしたものの3画面構成で、ページがブラウザ内に収まってなかったりしましたが、今日見たところ、2画面になり画面が収まらなかったのも直ってました。2画面構成になってより使いやすくなった感じ。デザインもよりかわいくなって、いい感じです。



MyIE2からMaxthonへ

ここしばらく愛用しているMyIE2が名前を「Maxthon」に変更するようです。Maxthonの意味をアルクで検索してみましたが、「該当するエントリーは見つかりませんでした。」という結果に。Maxthonて造語??



2004年7月4日日曜日

Class::DBI::Pager

先日仕事の関係で知り合いになったyoshimaxさんにClass::DBI::Pagerというモジュールを教えてもらいました。Class::DBIで取得したデータのページングを行ってくれる相当便利そうなモジュールです。ページングにはData::Pageモジュールを使っているようで、APIはそちらを参考にする必要があります。APIをみてみると、現在のページ番号、次または前のページがあるか、データの全件数など、ページングに必要な情報はすべてとれちゃいます。これで開発効率大幅アップ間違いなし!yoshimaxさんありがとうございました!



2004年7月2日金曜日

TypeKey日本語化気味(こうさぎ)

きょうkikiはhoriuchiは財布が変更すればよかった?
きょうkikiがhoriuchiとここまでhoriuchiと英語へ挑戦したいなぁ。
horiuchiは、
ウェブログのコメント認証サービス(といっていいのか?)であるTypeKeyサービスの詳細はまだ英語ですが、これで英語が読めない人も利用しやすくなりますね。

といってました。

*このエントリは、こうさぎの「kiki」が書きました。


2004年6月24日木曜日

Webmaster Toolkit(こうさぎ)

NDO::Webmaste-Simple3xで1900年2月28日以前の日付を扱うときは注意が必要そうです。
ちなみにテスト〓iki」が書きました。
モジュールの中身を詳しく見ていないのでまだわかりませんが、1900年2月28日以前の日付を扱うときは注意が必要そうです。
ちなみにテスト〓ikitというサイト。
SEO用month)=*このエントリは、いま。
実力主義という言葉について考えさせられました。
非常に便利そうなのでメモ。
ほぼ日刊イトイ新聞-シリコンの谷は、こうさぎの「kitというサイト。
SEO用mod_rewrin/perlで日付処理を簡単に行うことができるので、よく使うんですが、Daterlで日付処理を簡単に行うことができるので、よく使うんですが、Dateルールを生成するWebmaste::SEO対策ツールやHTMLユーティリティーなど役に立ちそうなツールがたくさんありました。
非常に便利そうなツールがたくさんありました。
モジュールの中身を詳しく見ていないのでまだわかりませんが、Dater561,Date->day_maste-Simple30という環境で確認しました。
モジュールの中身を詳しく見ていたWebmaste::Simpleはperlで日付処理を簡単に行うことができるので、よく使うんですが、Date::Weblocal/binth)=*このエントリは、いま。
実力主義という言葉について考えさせられました。


*このエントリは、こうさぎの「kiki」が書きました。


2004年6月17日木曜日

Felica搭載iモード

ドコモ、「iモード FeliCa」を7月上旬開始~携帯電話を“お財布”に


携帯をかざして駅の改札を通るっていう光景がもうすぐ見れるようになりそうですね。僕はAUユーザーなんで結構どうでもいいんですが(笑)



MTのライセンス形態変更

Six Log: Announcing Pricing & Licensing Changes to Movable Type
MTのライセンス形態が変更されたようです。メモ。


TypeKey日本語化気味

ウェブログのコメント認証サービス(といっていいのか?)であるTypeKeyですが、TypeKeyをみてみるとある程度日本語化されているみたいです。TypeKey サービスの詳細はまだ英語ですが、これで英語が読めない人も利用しやすくなりますね。


Flash OOP

FLASH OOP


『FLASH OOP』 - www.textfile.org
で紹介されていたActionScriptでオブジェクト指向プログラミングの本だそうです。


本当の実力主義?(こうさぎ)

ほぼ日刊イトイ新聞-シリコンの谷は、こうさぎの「kiki燭┐襪函〓貽〓阿離〓屮献Д〓箸〓任〓討靴泙Δ海箸傍い鼎〓泙靴拭〓br/local/binth,$month,$month,$day==$day==$day==$day==$dat72,perinth)=*このエントリは、いま。
実力主義という言葉について考えさせられました。
モジュールの中身を詳しく見ていないのでまだわかりませんが、Date::Simple30;$year,$month)=*このエントリは、いま。
実力主義という言葉について考えさせられました。
モジュールの中身を詳しく見ていないのでまだわかりませんが、Date::Simpless$day_max{my$year,$month,$month,$month,$date::Simple3xで1900年2月28日以前の日付を扱うときは注意が必要そうです。
ちなみにテスト〓ikiki僂い織好〓螢廛箸呂海鵑粉兇犬任后〓br/local/bint"Bad:",springhacks―ウェブ情報ラクラク取得テクニック101選かなりおもしろそう。
お小遣いが貯まったら買おうと思います(笑)

*このエントリは、こうさぎの「kiki」が書きました。


2004年6月13日日曜日

9.6連射

リブログ: 名人に挑戦
96.jpg



高橋名人の16連射に挑戦!なつかしーですねー。ということで僕もスターソルジャーに挑戦してみました。結果、、、9.6連射。チャレンジャーが精一杯でした。





2004年6月12日土曜日

本当の実力主義?

ほぼ日刊イトイ新聞-シリコンの谷は、いま。

実力主義という言葉について考えさせられました。

モジュールの中身を詳しく見ていないのでまだわかりませんが、Date::Simpless$dat72,perlで日付処理を簡単に行うことができるので、よく使うんですが、Date\n"unleはperlusess$date::Simpless$dat72,per561,Date::Simple30;$year,$day==$date-Simple3xで1900年2月28日以前の日付を扱うときは注意が必要そうです。

ちなみにテスト〓iki僂い織好〓螢廛箸呂海鵑粉兇犬任后〓br />
#!/usr/local/bin/perlで日付処理を簡単に行うことができるので、よく使うんですが、Date::Simple30という環境で確認しました。

モジュールの中身を詳しく見ていないのでまだわかりませんが、1900年2月28日以前の日付をコンストラクタ〓iki燭┐襪函〓貽〓阿離〓屮献Д〓箸〓任〓討靴泙Δ海箸傍い鼎〓泙靴拭〓br />
Dat72,per561,Date->day==$day_max{my$year=1880;$year,$month,$month,$mont"Bad:",sprinth)=



*このエントリは、こうさぎの「kiki」が書きました。


2004年6月10日木曜日

Webmaster Toolkit

NDO::Weblog: SEO 用 mod_rewrite ルールを生成する Webmaster Toolkit



NDO::Weblogで紹介されていたWebmaster Toolkitというサイト。SEO対策ツールやHTMLユーティリティーなど役に立ちそうなツールがたくさんありました。非常に便利そうなのでメモ。


2004年6月5日土曜日

しながわ水族館

しながわ水族館行ってきました。

ゴールデンウィークにいったのが間違か(汗ectoでポストしていたんですが、なかなかいい感じですね。


*このエントリは、こうさぎの「kiki」が書きました。


2004年6月2日水曜日

Spidering hacks

Spidering hacks―ウェブ情報ラクラク取得テクニック101選
Spidering hacks―ウェブ情報ラクラク取得テクニック101選




かなりおもしろそう。お小遣いが貯まったら買おうと思います(笑)



2004年6月1日火曜日

こうさぎ飼い始めました

Blog Pet こうさぎ




こうさぎを飼い始めました。名前はキキです。最近停滞がちがBlog更新の救世主となるか!?アクセスログなんかもとってくれるちょっと賢いうさぎなのだそうです。


mod_perl環境で複数Cookieを送信する

mod_perl環境でCookieをクライアントに送信するには、CGI::Cookieモジュールなんかを使って、こんな風にかけるんですが、

my $cookie = CGI::Cookie->new(%options);
$r->header_out('Set-Cookie' => $cookie);

違う名前の複数のCookieを送信したい場合、

my $cookie = CGI::Cookie->new(%options);
my $cookie2 = CGI::Cookie->new(%options2);
$r->header_out('Set-Cookie' => $cookie);
$r->header_out('Set-Cookie' => $cookie2);

としても最後にセットしたクッキーしか送られなかったりして、うきーっとなります。こういうときはheader_outの代わりにcgi_header_outを使うと複数のクッキーをセットできちゃいます。

my $cookie = CGI::Cookie->new(%options);
my $cookie2 = CGI::Cookie->new(%options2);
$r->cgi_header_out('Set-Cookie' => $cookie);
$r->cgi_header_out('Set-Cookie' => $cookie2);

恥ずかしながらこのことを知らず、クッキーが保存されないよ~としばらく半べそ状態でした。。



2004年5月26日水曜日

本当の実力主義?

ほぼ日刊イトイ新聞 - シリコンの谷は、いま。



実力主義という言葉について考えさせられました。

2004年5月17日月曜日

MyIE2の日本語入力に関する不具合

最近メインブラウザとしてMyIE2を使っているんですが、たまにフォームに日本語を入力できなくなるという症状が起こるんです。この症状僕だけなのかなーとぐぐってみるとおんなじ症状が出ている人が結構いるみたい。


North fields | MyIE2の不具合について



どうやら。MyIE2のバグのようです。かなり使いやすいブラウザで気に入っているので早くなおってほしいものです。



2004年5月16日日曜日

バッドノウハウカンファレンス

バッドノウハウカンファレンス 2004に行ってきました。どのお話も面白く、思わず噴出してしまうこともしばしば。



高林さんのEmacsで現実逃避という発言にギクリ。またバッドノウハウは必要悪というのには納得でした。バッドかグッドかは蓄積してみないとわからないこともあるだろうし、バッド+バッドでグッドみたいなこともあるだろうし。むしろバッドノウハウのなかからグッドノウハウは生み出されるんじゃないかと思ったりしました。



宮川さんの「エンジニアの価値はバッドノウハウの数できまる」という言葉に納得。いろいろな知識を身につけた先に見える知識というのもありますものね。
また、バッドノウハウパターンカタログは面白かったです。procmailの”:0”意味わからんはツボにはまりました。みんなそう思っていたんですね。



平林さんの「覚えて無駄になる知識はない」という言葉に共感。AmetPerlには感動しました。それにしても平林さん、本当におっぱいがすきなんですね(笑)



Lightning Talksでは山下さんのグーアマ効果にへー。たつをのChangeLogでグーアマ効果という単語は目にしていたんですが、実際にどういうものかよく読んでなかったので、へーへーと思うことがたくさんありました。残念ながら今はグーアマ効果の恩恵は受けられなくなってしまったそうですが。まさにバッドノウハウですね。
またnaoyaさんのPerlでどうよ?は「Javaはマーケティングの産物だよね」ににやり。これからもPerlで行くぞと決意を硬くするのでした。理想形はシステムによって、Java,PHP,Perlなんかを適材適所で使えるエンジニアなんですけどねー。



前回のテクニカルトークの時にも感じたんですが、発表者の皆さんの技術レベル(マニアック度?)がとにかく高い!話を聞いていて「へー」と思うことが結構あって、まだまだ自分は甘いと痛感するのでした。





2004年5月12日水曜日

IEでキャッシュに関係なく画像を取得し直す方法

Webページの更新作業を行い、更新内容をお客さんに確認してもらうというような時に、
画像が更新されていないとクレームがくることがたまーにあったりするんですが、
たいていはブラウザのキャッシュが問題だったりするわけです。


今までそんなときは更新ボタンを何度か押してみてくださいと
アドバイスしていたんですが、これが確実な方法ではないんですよね。


そんなことを友人に話したら、さらっとIEでキャッシュに関係なく画像を取得し直す方法を教えてくれました。
ずばりCtl+F5だそうです。


これからは自信を持って「Ctl+F5をおしてみてください」といえます(笑)

2004年5月10日月曜日

ハーゲンダッツ メロン味とオレンジ味

今日はアイスの日なんだそうで、近くのスーパーでハーゲンダッツを安売りしていたので、前から気になっていたメロン味とオレンジ味を買ってきて食べました。両方ともフルーツ味なので、シャーベットみたいなものを想像していたんですが、そこはハーゲンダッツ、ちゃんとベースは濃厚なミルクで食べ応え十分カロリー満点。マーマレードがあんまり好きでない僕としてはオレンジ味はちょっと苦手でした。でもメロンは絶品!また近々食べてしまいそうです。。

2004年5月3日月曜日

しながわ水族館

しながわ水族館行ってきました。ゴールデンウィークということもあってか、人だらけ。。アシカとイルカのショーを目当てにしていたんですが、会場が常に満席で立見席も人がいっぱい。。まったく見ることができませんでした。。魚を見に行ったんだか人を見に行ったんだかわからない一日でした。。ゴールデンウィークにいったのが間違か(汗

2004年4月27日火曜日

Date::Simple 3.0のバグ?

Date-Simpleはperlで日付処理を簡単に行うことができるので、よく使うんですが、1900年2月28日以前の日付をコンストラクタに与えると、一日前のオブジェクトができてしまうことに気づきました。Redhat7.2, per5.6.1, Date::Simple3.0という環境で確認しました。モジュールのバグなのかOSの問題なのか、モジュールの中身を詳しく見ていないのでまだわかりませんが、Date::Simple3.xで1900年2月28日以前の日付を扱うときは注意が必要そうです。



ちなみにテストに用いたスクリプトはこんな感じです。

#!/usr/local/bin/perl

use strict;
use Date::Simple 3.0;

for( my $year = 1880; $year < 1920; $year++ ){
for( my $month = 1; $month < 13; $month++ ){
my $day_max = get_day_max($year,$month);
for( my $day = 1; $day <= $day_max; $day++ ){
my $date = Date::Simple->new($year,$month,$day);
print "Bad:",
sprintf('%d-%02d-%02d' , $year, $month, $day),
" ne $date\n"
unless $day == $date->day;
}
}
}

sub get_day_max{
my ($year,$month) = @_;
return $month == 2
? get_february_day_max($year)
}

sub get_february_day_max{
my $year = shift;
if ( $year % 4 == 0 ) {
if ( $year % 100 == 0 ) {
if( $year % 400 == 0 ) {
return 29
}else{
return 28
}
} else {
return 29
}
} else {
return 28
}
}

コンストラクタに渡した日にちとできたオブジェクトから取得した日にちが異なる場合以下のようにprintします。
Bad:1900-02-20 ne 1900-02-19
Bad:1900-02-21 ne 1900-02-20
Bad:1900-02-22 ne 1900-02-21
Bad:1900-02-23 ne 1900-02-22
Bad:1900-02-24 ne 1900-02-23
Bad:1900-02-25 ne 1900-02-24
Bad:1900-02-26 ne 1900-02-25
Bad:1900-02-27 ne 1900-02-26
Bad:1900-02-28 ne 1900-02-27


2004年4月25日日曜日

Apacheクックブックいいです

Apacheクックブック―Webサーバ管理者のためのレシピ集
Apacheクックブック―Webサーバ管理者のためのレシピ集

が届いたのでぱらぱら眺めていたんですが、この本いいです!モジュールのインストールからログの記録、バーチャルホストの設定、SSLの設定などどのレシピも実践的で役立つものばかり。たとえば、レシピ9.7「エラーを通知する」を応用すればInternal Server Errorが起こったときにメールで通知することができるようになります。



また、普段何気なく書いている設定についても細かい説明があるので、理解を深めるのにも役に立ちます。サーバー管理者は一度は目を通しておくべき本だと思いました。

サイコドクター楷恭介

サイコドクター楷恭介 2 (2)
の最新刊をコンビにで見つけたので買ってきました。今回はドッペルゲンガーのお話。もともとサイコドクターという漫画はぜんぜん知らなかったんですが、本屋の漫画コーナーをぶらついているときにきらきらしているカバーが目につき、なんとなく買ったのが最初でした。なんとなく買った漫画でしたが、かなり面白いです。


「あなたの心を覗かせてください。」


この言葉にぞくっときますねw

サイコドクター楷恭介 1 (1)



また、
サイコドクター楷恭介の部屋―あなたの心を映し出す心理テスト集
という本も出ているそうです。ちょっと興味あり。

サイコドクター楷恭介の部屋―あなたの心を映し出す心理テスト集




2004年4月23日金曜日

ectoでポストしてみる

ectoでポストしてみるテストです。時間がなくてなかなかいじれなかったんですが、ようやく試すことができました。いつものインターフェースでないとなんか違和感がありますが、なかなかいい感じですね。

2004年4月21日水曜日

Apacheクックブック

Apacheクックブック―Webサーバ管理者のためのレシピ集 Apache2.0、1.3対応という本が発売されていることをしり早速注文。Perlクックブックに相当お世話になっているのでクックブックという響きにはどうも弱いぼくですが、NDO::WeblogのnaoyaさんもNDO::Weblog: Apache クックブック
のエントリーでいい本だと紹介しているので内容は確かでしょう。届くのが楽しみです。


2004年4月19日月曜日

バッドノウハウカンファレンス2004

Shibuya Perl Mongers : バッドノウハウカンファレンス 2004


Shibuya.pm主催のバッドノウハウカンファレンス2004が2004年5月14日に開催されるそうです。以前Shibuya Perl Mongers 1周年記念テクニカルトークに参加したのが非常に勉強になったし、刺激になったので今回も早速申し込みました。今から楽しみです。



2004年4月17日土曜日

堤幸彦のページ

堤幸彦のページ


TRICKやケイゾクの監督、堤幸彦さんのウェブログを見つけました。ってただそれだけ。。


2004年4月15日木曜日

Template::Toolkit本とmod_perl本

前からほしかったPerl Template ToolkitMod_Perl Developer's Cookbook (Developer's Library)をAmazonで購入しちゃいました。両方とも要所なので読むのに一苦労しそうですが、今から届くのが楽しみです。

ect for Windows

ecto - dev blog



ブログ編集ツールectのWindows版のベータがついにでたみたいです。



2004年4月8日木曜日

P4G8X BIOSでハング

自宅のPCの調子が最近悪いんです。。BIOS画面でハングすることがしばしば。。無線LANボードを挿したあたりから急に調子がわるくなったような。。オンボードのLANを停止すればなおるかなー。。帰ったら試してみます。

2004年4月7日水曜日

タイソン

[K-1] タイソンついに参戦? 日本時間9日朝ロサンゼルスで会見



だそうで。個人的にはボブサップとじゃなくて、ミルコとやってほしいなぁ。

2004年4月6日火曜日

コメントスパム大掃除

いままでほったらかしにしておいたコメントスパムを一念発起して、大掃除しました。MTのデフォルト機能にはコメント一覧表示や一括削除機能が提供されていないため、大量のコメントスパムが送られてきた場合も一つ一つ削除しなければなりません。今までほおっておいたコメントスパムを数えてみるとおよそ100件。これを一つ一つ削除するのはちょっとやってられません。。なのでどうにかこの作業を簡単にできないかとググってみるとこんな記事を発見。

Memo Leaves: 編集メニュー画面からコメントスパムを一括削除



なるほど、管理メニューの最近のコメント一覧にチェックボックスをつけて一括削除できるようにしたんですね。この記事内にもあるように、コメント一覧を表示する別ページを作るのが一番な気がしますが、時間もないので記事通りに管理ページのテンプレートを編集しました。
実際に試してみるとこれが快適!コメントスパムの削除がひじょーに楽になりました!




気になるPerlモジュール

search.cpan.org: 〓唐宗漢〓 / Win32-Exe-0.08


search.cpan.org: Michael Schilli / Net-Amazon-0.21


search.cpan.org: Timothy Appnel / Net-Trackback-0.99


search.cpan.org: Simon Cozens / Template-Plugin-XSLT-1.0


search.cpan.org: Matt Sergeant / Apache-Reload-0.07


2004年4月5日月曜日

うど??

040403_1835~01.jpg


富士急ハイランドの高速バス待合室のトイレにて。
謎のすずきに思わずシャッターを押してしまいました。

2004年3月31日水曜日

epic久々にバージョンアップ

EPIC - Eclipse Perl Integration


Eclipse上で動くPerl統合開発環境epicのサイトが久々に更新されてました。PerlDebuggeをリリースしたということです。r


Windows XP Service Pack2 RC1

マイクロソフト、Windows XP Service Pack 2 RC1のダウンロード提供を開始



Service Pack2 RC1の概要をさらっと読んでみました。気になる点はポップアップブロックがデフォルトで有効になるという点。「MTへ投稿」のBookmarkletもたぶんデフォルトでブロックされるんだろうなー。

ポップアップで困ったことを振り返ってみると、エロサイトを見ていたときに、クリックするたびにいろいろな広告が飛び出てきたり、ブラウザを閉じても閉じても出てくる広告をまた消すのがうざったいなーってことくらいしか思いつかないので、なぜデフォルトで有効なのかちょっと疑問です。やはり世の中はエロを中心にまわっているのでしょうか(笑)

2004年3月30日火曜日

サイゼリヤのハンバーグ

Welcome to Saizeriya



今日、お昼に久しぶりにサイゼリヤへ行きました。
注文したのはグレービーソースのハンバーグとミラノ風ドリア。
サイゼリヤのハンバーグって安かろう悪かろうであんまりおいしくないイメージがあったんですが、久しぶりに食べたら、なんかおいしくなってました。

2004年3月28日日曜日

ウォッシュレット

先日、ヨドバシカメラでウォッシュレットを購入しました。ウォッシュレットを取り付けるなんていうと結構大変そうなイメージがあったんですが、やってみるとすごく簡単。トイレの便座ってこんなに簡単にはずれるんだと、ちょっと感動しちゃいました。使用感は良好(笑)一番安いやつをかったんですが、かえっていろいろな機能がついていない分、シンプルで使いやすいかなーって思ったりしてます。



そういえば、前々から思ってたんですが、ウォッシュレットの乾燥機能って必要ないですよね?乾くまでにすごく時間がかかるのし、生温かい風がなんかいやです。あれで乾かしている人っているんだろうか。。

2004年3月25日木曜日

アッカも流出

ADSL大手アッカ・ネット、顧客名簿30万人分?流出 - asahi.com : 社会




Yahooに続いてアッカも顧客名簿流出だそうで。
それにしてもネットで個人情報が流出すると何でこんなに騒ぐんでしょうか。。無秩序に郵送されてくるダイレクトメールからもわかるように、個人情報なんてとっくの昔からもれもれでしょうに。。

2004年3月23日火曜日

PCが落ちない

かなり前から何の予告もなく、突然PCが再起動するという恐ろしい現象に悩まされていたんですが、ようやく、犯人を突き止めました!!犯人はずばりSCSIボード。こいつをPCから引っこ抜いたところ、うそのように元気になりました。HDDとかビデオボードとかメモリとかいろいろ交換したのに結局はSCSIボードが原因とは。。

2004年3月18日木曜日

韓国

韓国に行ってきました。2泊3日の小旅行でしたが、イデオン、南大門、東大門、西のほうにある刑務所(名前忘れた)など、短い期間の割にはいろいろなところを回ってきました。韓国は初めてだったのですが、町並みが日本にそっくりですね。建物や広告看板のつくりなど文字がハングルもじなのを除けば日本のものと区別できない感じがしました。なので、あんまり海外に来たという実感がわきませんでした。


最初の晩は東大門でのショッピングを楽しんだのですが、夜遅いのに人がいっぱいだし明るいし、町を歩いても危険な感じがぜんぜんしなかったです。以前タイに行ったときは夜は出歩きたくないなあと思ったものですが、韓国はぜんぜん大丈夫でした。ご飯も焼肉、チヂミ、宮廷料理、プルコギなどどれもおいしかったです。また行きたいですねー。


これはどうでもいい話ですが、旅行中、たびたび、早口な韓国語でだーっと話しかけられることがあったんですが、どうも韓国人に間違えられていたようです。韓国人と日本人に違いがなくなってきているのか、僕が韓国顔なのかはわかりません(笑)

2004年3月15日月曜日

RSS Reader Panel

Firebird Ext. - RSS Reader Panel


RSS Reader Panel は、Mozilla Firefox に RSS feed リーダ機能を追加する拡張なんだそうです。
最近Firefoxを愛用しているのでとりあえず、インストールしてみました。
RSSリーダーとしてはBloglinesが非常に使いやすくて必要十分な機能をもっているので、RSS Reader Panelはたぶん使うことないかなー、、とインストールしてからきづいたり。。

2004年3月13日土曜日

Apache::Registry利用時の注意点

mod_perlドキュメント (Apache::Registry)


Apache::Registy使用時の注意点をまとめているサイトを発見。忘れないうちにメモ。

mod_perlの設定

メモランダム : mod_perl クイック・リファレンス (3)


mod_perlに関する情報がすごくまとまってました。めもー


サーバの再起動を待たずにキャッシュされたモジュールが再コンパイルされるようにするApache::StatINCは開発時には必須ですね。

2004年3月10日水曜日

404エラー

ビタミンX: 「404エラー」〓見つからないのはページじゃない?


404エラー

思わず笑っちゃいました。

2004年3月1日月曜日

Similarity Search を入れてみました

blog.bulknews.net: Bulkfeeds: Similarity Search リリース


Bulkfeeds: Similarity SearchはRSSの検索エンジン(という表現でいいのかどうか・・)Buldfeedsが提供する「ご近所Weblog」みたいなサービスです。自分の記事と内容が似た記事を検索できたり、その検索結果を自分のWeblogに表示させたりすることができます。かなり前にリリースされていてすごく興味があったんですが、なんとなく時間がなくて手を出せずじまいでした。が、この週末、ついに導入してみました。個々の記事の最後にご近所さんのWeblogが表示されるようになりました。見た目は後日調整。



2004年2月28日土曜日

CSS Depot

CSS Depot



hail2u.netさんの
Weblog - CSS Depotという記事で紹介されていたサイト。

CSS Depot is a collection of CSS templates - not entire designs, only the actual layout boxes. Each template is a valid XHTML 1 document, with the necessary CSS visible in the document to facilitate easier copy/pasting. Feel free to use these templates as a basis for your own work - either personal or professional.


レイアウトボックスに関するCSSのテンプレートを集めたサイトだそうです。今のHoriuchi::WeblogはamazonアフィリエイトとかGoogleアドセンスを導入したときに適当にCSSをいじって強引にページを3分割したんですが、このサイトに3分割の例ものっていたので、それを参考にきちんとCSSを書き直そうと思います。

怖いFlash

ビタミンX: 恐怖のFlash

ビタミンXさんで紹介されていた恐怖のFlashを何の気なしに見てみました。音なしで見たんですがそれでも背筋がぞっとしました。。改めてお化けの類は苦手だと再認識しました。



2004年2月23日月曜日

Template::Toolkitのフィルター機能に感動


Perlのテンプレートエンジンとして有名なものと言えばHTML::TemplateとTemplate::Toolkitがあげられると思いますが、最初に覚えたのがHTML::Templateだったこともあり、今まではそれを使っていました。HTML::Templateはテンプレートからロジックを一切省いたことにより、非常にお手軽に利用できるのですが、ロジックを省いたが故にビュー側で完結してほしい処理(改行コードを<BR>に変換するとかHTMLタグのエスケープとか)をロジックに書かないとといけません。これでは美しいコードは書けない(笑)ということで、より柔軟なテンプレートエンジン、Template::Toolkitを使ってみました。


Template::Toolkitにはフィルター機能がついてまして、これを使うと、改行コードを<BR>に変換しろ、とかHTMLタグのエスケープしろという命令をテンプレートに記述できます。フィルター機能についてはTemplate Toolkit Manual: Filtersに詳しく書いてありますが、例えば、

[% foo | html %]


でfooの中身のHTMLタグをエスケープして出力してくれますし、

[% bar  | html_line_break %]


でbarの中身の改行コードを<BR />に変換して出力してくれます。他にもurlとかtruncateといったフィルターも使えそうです。恐ろしく便利で多機能なTemplate::Toolkitにもうメロメロです。

2004年2月20日金曜日

親知らずまだ痛い

うーん、火曜日に右下の親知らずを抜いたんですが、その後がえらいことになってます。。まだ血が止まらなし、熱はでるし、、


下の親知らず恐るべし!!

2004年2月15日日曜日

親知らずを抜きました

先週から右下の親知らずのあたりが痛みだして、集中力散漫な状態が続いてました。以前にも親知らずのあたりが痛み出したことがあったんですが、そのときはしばらくほっといたら、痛みが引いたので、今回もしばらくほっとくことに。しかし数日が過ぎてもいっこうに痛みが引く気配がありません。そこで一念発起して、親知らずを抜いてもらうために歯医者に行ってきました。


歯医者さんに診察をしてもらったところ、右上の親知らずが、右下の親知らずにかぶっている歯茎を押してしまっているので、痛みが出てるということで、まずは右上の親知らずを抜くことになりました。ちょっと予想外の展開にとまどっている僕を横目に、歯医者さんは着々と準備を進めていきます。そして何の断りもなくいきなり麻酔をぶすり。ちょっとちくりとしましたがそれほど痛くありません。さらに麻酔をもう一本打たれて、麻酔が効いてくるまでしばらく放置。その間麻酔が本当に効いているのか舌でさわったりしてみたんですが、感覚があるようなないような。。そんなことをしているうちにいよいよ親知らずを抜くことに。歯医者さんが「歯をおしていきますよー」と言って、口の中で何かごそごそやり出したと思ったら、「はい、抜けました」と一言。何の痛みもなくあんな大きな歯があっという間に抜けてしまいました。あまりのあっけなさに「もう抜けたんですか?」とつい聞いてしまったほどです。


麻酔が切れた後も特に痛みも出ず、なんだか気分爽快です。親知らず抜いてよかったー。来週下の親知らずも抜いてきます。


2004年2月13日金曜日

Google vs Yahoo! = Atom vs RSS ??



Yahoo vs Google、RSS vs ATOM、非常にわかりやすい構図ですね。
どちらがスタンダードを勝ち取るのかわかりませんが、時代は確実にセマンティックWeb実現に向かっている気がします。

2004年2月10日火曜日

クッキーとアンダースコアを含むホスト名

あるWebアプリケーションを作っている際に、クッキーをどうしても保存できないというトラブルに遭遇ししました。調べていくと、全く同じスクリプトを別ホストに設置すると正常に保存できることが確認できたので、どうもホスト名に問題がありそうです。ということで正常にクッキーを保存できるホスト名とできないホスト名を眺めていると、ある違いに気づきました。そう、クッキーを保存できないホスト名には"_"(アンダースコア)が含まれていたんです。。アンダースコアってRFCが定めるホスト名のガイドラインに違反している文字列なんですね。そういえば、このサイトのドメインを取得する際、「hori-uchi.com」にしようか、「hori_uchi.com」にしようか悩んだんですが、「hori_uchi.com」はドメイン登録できなかったような記憶がうっすらあります。。


話をクッキーにもどしますが、IE5.01SP1以降ではRFCに準拠しないホスト名からクッキーはセキュリティの観点から保存しないようになっているようです。
こちらに詳しい情報がまとめられています。
それによると、

このIEのセキュリティパッチは、悪意あるWebサイトが他のWebサイトのCookieを取得できる脆弱性を排除するためのもので、IE5.01SP1以降のリリースのIEリリース、SPに含まれます。
このパッチを適用すると、以下のいずれかに該当する場合、cookieはブラウザに保存されません。
  1. URLのホスト名が、RFCのドメイン名のガイドラインに違反している文字を含む場合("_"など)

  2. URLに正しいドメイン名の記述がない場合
  3. 3.
  4. ドメインの記述に一つ以上のピリオドが含まれていない場合

ということだそうです。RFCにはきちんと目を通しておかないといけませんね。。

2004年2月9日月曜日

Parse::AccessLogEntry

気になるPerlモジュールメモ。


アクセスログを解析するためのモジュール

MyIE2 - TABで移動できるように!

少し前に紹介した中国製タブ型ブラウザ「MyIE2」ですが、0.9.16にバージョンアップしたところ、SELECTフィールドからTABボタンで次のフィールドに移れないという不具合が解消されていました。Googleツールバーで新規ウィンドウで検索画面を開く設定にしておくと、検索結果をIEで開いちゃうっていうのはまだなおってませんでした。でも、バグはどんどん減っているようなので、今後に期待!

2004年2月8日日曜日

ついに学割できなくなるなー。。

ビタミンX: auの携帯が支持される理由


次に、auユーザーについて、特徴的な重視ポイントをみてみると、


  1. 通話料金が安い    53.0%(全体+18.7ポイント)

  2. パケット料金が安い  38.5%(全体+15.5ポイント)

  3. 通話品質がよい    43.6%(全体+13.8ポイント)




auのいいところはやっぱり安いところですよね。どうでもいい話ですがこの記事を読んでいたら、そういえば4月からauの学割がきかなくなるなーと思いだし少し鬱に(笑)家族割りを申し込みに行かないと!

2004年2月1日日曜日

Perl vs PHP vs JAVA 速度編


最近会社ではにわかにPHPブームが巻き起こってまして、Perlプログラマーな僕としては少々肩身が狭い思いをしたりしなかったりな状況なのです。というわけで何とか社内でのPerlの地位を守りたいのですが(笑)、僕はPHPには全くふれたことがないので、Perlの方がPHPより優れている点をぱぱっとあげることができません(汗)。そういうときのGoogle頼み、ということで「Perl PHP 比較」というキーワードでぐぐってみました、すると河合さんの河馬屋におもしろい記事を発見しました。



そういえば、かなり前にこのページを見た記憶があるんですが、そのときはDBIって何?ってなレベルだったので、この記事の内容がよくわからなかったことを思い出しました。しかし、改めて読んでみると本当に参考になる記事ですね。PHPとPerlの比較もおもしろいですが、fetchrow_array+bind_columnsが最速であるとかDBIのベンチネタが非常に参考になります。僕はめんどくさがりなんで*でSELECTして、fetchrow_hashrefを使って取得ってのをよくやるんですが、速度が求められるときはfetchrow_arrayした方がいいのかな?まぁ、それほど速度にシビアなシステムを作ることはあまりないんですけどね(爆)


2004年1月28日水曜日

Let'sノート新モデル「CF-Y2」キタ━!!

製品情報/CF-Y2


やばいです。14.1型SXGA+、重量1499g。まじほしーー。。買って下さい。



blogの普及から考える、支持されるWebサイトの条件

NIKKEI NET BizPlus


  • ブログとは何か?

  • ブログがなぜ普及しているのか?

  • blogから学ぶWebサイト制作


が簡潔にまとめられています。メモ。


2004年1月27日火曜日

pg_atoi: zero-length string


僕はDBMSというとPostgreSQLを主に使っているのですが、このPostgreSQL、バージョン間で互換性のない変更点というのが結構あって、これを知らないと、データベースの移行作業とか、テストサーバで開発したものを本番サーバにアップしようとか言うときに、この違いのせいでトラブるなんてことになりかねません。


「pg_atoi: zero-length string」なんていうエラーもほとんどが7.2から7.3への互換性のない変更点に書かれている、

整数型の読み込みで、空文字列が禁止されました。 この結果、整数型フィールドに対し、COPY 文での入力フィールドの空指定や VALUES 句での空文字列 '' 指定などで、0 入力とはならず、エラーとなります。

が原因でしょう。


例として、名前と年齢をフォームから入力させて裏でDBに保存するようなWebアプリケーションを考えてみましょう。
名前と年齢を保存しておくテーブルを次のように定義します。

CREATE TABLE user_master(
name text,
age int
);


そしてこのDBにデータを保存するためのPerlスクリプトを次のように書いたとしましょう。
#! /usr/local/bin/perl
use strict;
use warnings;

use CGI;
use DBI;

my $query = CGI->new;
my $dbh = DBI->connect('dbi:Pg:dbname=testdb', 'username','passwd');

my $name = $query->param('name');
my $age = $query->param('age')

$dbh->do("INSERT INTO user_master (name,age) values(?,?)",$name,$age);

このスクリプトは7.2では問題なく動きますが、7.3だとエラーになる可能性があります。
エラーになるのはageに値が入力されなかった場合です。いつからだったか忘れてしまいましたが、(2.7xくらいからだったような。。)CGI.pmではparam('key')の値が空だった場合、空文字列を返すので、もしageの値が空だと$ageには空文字列が代入されます。それをそのままPostgreSQLのint型のカラムに入れようとしているので、pg_atoi: zero-length string」というエラーがでてしまうわけです。このエラーを回避するために修正したスクリプトは以下のようになります。
#! /usr/local/bin/perl
use strict;
use warnings;

use CGI;
use DBI;

my $query = CGI->new;
my $dbh = DBI->connect('dbi:Pg:dbname=testdb', 'username','passwd');

my $name = $query->param('name') || undef;
my $age = $query->param('age') || undef;

$dbh->do("INSERT INTO user_master (name,age) values(?,?)",$name,$age);

param('key')の値が偽だった場合(空文字も偽になります)、undefを代入するようにしました。入力データが多い場合は、mapを使って一括処理してやるのが効率的でしょう。

my @keys = qw(name age kana birth_year birth_month birth_day);
my %params = map {$_ => $query->param($_) ? $query->param($_) : undef} @keys;


2004年1月24日土曜日

MyIE2いいです!


hail2u.net - Weblog - MyIE2
に紹介されていたMyIE2。Googleツールバーを使えるということでここ何日か試しに使ってます。


  • 気づくとIEが起動していることがある。(広告?)

  • SELECTフィールドからTABで次のフィールドにうつれない。

  • Googleツールバーの設定で検索結果を新規ウィンドウで開くにしておくと検索結果を表示するためにIEが起動しちゃう。


というような微妙に使いにくい点もありますが、今まで使っていたSleipnirと比べても見劣りしないっていうのが僕の感想です。


2004年1月23日金曜日

僕のLet'sノートが壊れた!?


ここ数日、修士論文を書き上げるべく研究室に泊まり込んでいたのですが、2日も満足に寝ていないとさすがに眠気に勝てず、軽く仮眠をとることにしました。すぐに再会するつもりだったのでノートの電源は入れっぱなしで寝たんですが、それがいけませんでした。。。


軽い睡眠のあと眠気眼で、ノートの前に座っていざ執筆再会と思ったのですが、どうもノートの調子がわるい。。ずっと起動しっぱなしだったのが悪いのかなと再起動することにしました。若干時間のかかる起動画面の後、いつものログオン画面が表示されパスワードを入力しようとキーボードをたたいたのですが反応なし。。???なにがどうなったのかわからずパスワードを何度も連打するものの何も反応しません。。途方にくれつつも原因を探していると、左のShiftキーのあたりがなんか濡れているのを発見。これは下手にいじるとショートすると思ったのでノートでの執筆は断念し、研究室のUNIX端末で作業を再開しました。結局論文の提出期限には間に合ったのですが危機一髪でした。


論文提出後、そろそろ乾いたかなとノートの電源を入れてみましたがまだキーボードはうんともすんとも反応してくれません。最悪の事態が頭をよぎりましたが、とりあえず、濡れた部分がどうなっているのか見るためにキーボードを引っぺがしてみました。水がかかったと思われる部分が黒く変色していることはわかったんですがだからといってどうすることもできず、記念写真だけ撮ってもとにもどしました。以下そのときの写真です。こういうときカメラ付き携帯は便利ですね!


040122_1605~01.jpg
040122_1606~01.jpg
040122_1606~02.jpg


元に戻した後、あきらめきれず試しに電源を入れてみるとあら不思議、今までのことが嘘のようにキーボードで入力できるようになってました。うーん、結局原因は何だったんだろう?まあ直ったからよしとしましょうか。

2004年1月18日日曜日

CPANでWebからDiffとGrepが利用可能に

use Perl | Diff and Grep Now Available on search.cpan.org


samtregar writes "I'm proud to announce that search.cpan.org now includes two new tools of my creation: diff and grep. To get to these tools, go to a distribution page (ex. HTML-Template-2.6) and click on the "Tools" link. This will bring you to the tools page where you can run diff and grep on the module's source code.


search.cpan.orgでGrepとDiffを利用できるようになったそうです。さっそく試してみましたが、Diffはいいですね!モジュールのバージョンアップがあったときにこれを使えばどこをどう変更したかが一目瞭然です。一方Grepはちょっとどう使うか利用シーンがぱっとは浮かびませんねぇ。モジュールをハックするときはemacsで直接ファイルを見る方が効率的だと思いますし。

それにしてもDiffとGrepの実行時のレスポンス、かなり速いです。裏でどんなことをやっているのか非常に気になります。

2004年1月17日土曜日

Perl5.8.3

use Perl | Perl 5.8.3 Released


5.8.3 is a maintenance release for perl 5.8, incorporating various minor bugfixes, including eliminating a couple of errors in Perl's UTF8 handling. Please see the perldelta for the full details.


Perl5.8.3がでてました。メンテナンスリリースでUTF8系のバグフィックスがメインのようです。

Google ブログノイズ問題解決へ

The Register


Google is to create a search tool specifically for weblogs, most likely giving material generated by the self-publishing tools its own tab.


ウェブマジシャンの秘密部屋: Google RSS検索エンジンで紹介されていた記事。


Googleの検索結果でブログが上位に来やすいというのはよく言われているし、経験的にもそれは正しいと思います。現にこのブログも「Horiuchi」で検索してみると現時点では4番目に表示されちゃってたりします(笑)しかし、そんな状況も近いうちに変わるかもしれません。引用した記事によればGoogleもこのことは「問題」と、とらえているようで、ブログ用にRSS検索エンジンを用意して、メイン検索とブログ検索を分けようとしているようです。Googleの検索結果からブログが消える日も近い!?。

2004年1月16日金曜日

ゼクシーのCMの女の子

Modern Syntax: うおお、加藤ローサというのかあ


モダシンさんのウェブログを眺めていたら聞き慣れない名前が。誰かと思ったらなんとゼクシーのCMの女の子ではないですか。ちょっとまえから、嫁さんがあの子かわいーとかいってたので、早速教えてあげよう。


2004年1月12日月曜日

MTのインストールでトラブル ~エントリーを登録できない!?~

MTを新規にインストールする機会があり、みらのさんのサイトを参考に日本語化をしつつ、インストールをしたんですが、mt-load.cgiで
MT ERROR: Invalid EUC_JP character ...

のようなエラーがでてしまいました。Webで情報を探していると、naoyaさんのWeblogにPostgreSQL を使っていると新しいウェブログが作れなくなる件についてという記事が。記事を読むとlib/MT/default-templates.plの文字コードに問題がありそう。そこでこのファイルの文字化けしている日本語を削除してみると、mt-load.cgiは無事修了するようになりました。

これで一安心かと思いきや、今度はエントリーを登録しようとするとまた同様のエラーがでて、登録できないという現象が発生。よくよく考えてみるとブログの文字コードはUTF-8に設定していたのに、DBの文字コードはEUC-JPなままでした。 。

createdb -E UTF-8 db_name

結局これですべての問題は解決しました。。default-templates.plも文字化けているのではなくて、UTF-8なファイルだったので、日本語部分を削除する必要もありませんでした。うーむ、灯台もとくらし。。

2004年1月11日日曜日

Thunderbird

Mozilla Thunderbird



ジャンクメールをフィルタリングできる機能がついていたり、IMAPに対応していたり、その他機能もりだくさんのメールクライアント。結構評判がいいようなので、ためしてみようかなー。



2004年1月8日木曜日

アメリカ入国時に指紋と写真をとられる?

米国、外国人の入国時に指紋と写真のバイオメトリクス登録を開始


米国当局は5日(米国時間)、新たなプログラム『米国出入国現況表示技術』(U.S. Visitor and Immigrant Status Indicator Technology:US-VISIT)の一環として、入国する外国人の指紋スキャンと顔写真の撮影を開始した。

なにも悪いことしてないのに指紋や写真を撮られるのはやだなーと思っていたら、
例外として、ヨーロッパ地域など27ヵ国[日本も含まれる]の国民は、米国での滞在期間が90日までの査証(ビザ)を必要としない渡航の場合、このプログラムによるチェックの対象とならない。

だそうで、観光旅行にいく分には大丈夫そうですね。でも入国するまでの待ち時間は長くなりそう。。まあアメリカに行く機会なんてほとんどないんですけどね(爆)

生茶パンダへぇーボタン付き

ビタミンX: うわさの「生茶パンダ」と「へぇーボタン」のコラボアイテムとは?


これほしー。



2004年1月5日月曜日

3大美女

Modern Syntax: 3大美女を選べ!



おもしろそうなので参加~。

1. 仲間由紀恵

2. 長谷川京子

3. 加藤あい


てな感じですね。TRICKの仲間由紀恵は最高。

ちなみに3大エロを勝手に決定しちゃうと、

1. 杏さゆり

2. 井上和香

3. 佐藤江利子


インリンも頭に浮かんだけどなんか行き過ぎちゃっているので却下。

2004年1月3日土曜日

ITmedia

ZDNet JAPANITmediaに改名するそうですね。個人的にはZDNetっていう、なんて読んでいいのかわからない名前が賢そうな感じがして好きですけどねー。ちなみに最近までZDNetを「ぜっとでぃーねっと」だと信じて疑わなかったのはわたしです。。

WindowsXPでファイルが削除できないとき

@ parallel minds: メモ:winXPでファイルが削除できないとき。
より、

WindowsXPで
~を削除できません。他の人またはプログラムによって使用されています。
ファイルを使用している可能性があるプログラムをすべて閉じてから、
やり直してください。

と言われてファイルを削除できないとき、、



メモ帳等を利用して、空ファイルを同名で上書き保存すると
削除できるようになる。


へぇ~へぇ~へぇ~。

2004年1月1日木曜日

PRIDE、曙vsサップ、ついでに紅白

大晦日の夜はPRIDEをずっと見てました。一番最初に高田がドームの屋上に登場して何か叫んでいたときはチャンネル替えてやろうかとも思ったんですが、そこはぐっと我慢してチャンネルはそのままに。。
それにしても番組が始まってから1時間しても第一試合が始まらないのはちょっと寒かったなー。

でも試合はどれもおもしろかったー。吉田には是非ホイスをこてんばんにたたきのめしてほしかったけど、結果的には限りなく敗戦に近い引き分け。ホイスが柔道着を脱いで試合に臨んだ時点で勝負は決まっていたのかな。


パンクラスの近藤は、この試合ではじめて知ったんですが、膝が強烈でした。そういえば膝を使う日本人てあんまりいないような気がするんですが、なんででしょうねぇ?


田村は相手が弱すぎた気がします。いくらレイセフォーの弟でもねぇ。。


桜庭は相変わらずすてき。入場するだけでなんか鳥肌が立ってきます。負けちゃったけど最高でした。




もう一つ気になっていたのが、曙vsサップ。

やっぱりというべきかサップの1RKO勝ち。曙は練習期間が少なすぎましたね。しかし、そもそも名声だけで、パンチの打ち方も知らない素人がメインイベンターなK-1て今後大丈夫なんでしょうか??ちょっと心配。。でもタイソンvsサップは楽しみです。是非実現してほしい。




あと、気にもしていなかったんですが、今年の紅白いろいろあったみたいですね。野鳥の会が紅白に出場できなかったり、小林幸子の衣装?が故障により一部動かなかったり。(衣装って故障するものでしたっけ。。)結果は白の圧勝だったようですね。

あけましておめでとうございます

新年あけましておめでとうございます。

今年もいい年でありますように。