動画の作成、配信の部分をお手伝いさせていただいた、映画「シムソンズ」の公式ムービーブログ「シムソンズ ムービーブログ!」で動画にツッコミを入れることができるという、ちょっと面白いことをやっています。
エントリーにコメントをつけると、そのコメントを映画の字幕のように、動画と一緒に流すことができるという機能です。動画を見るだけでなくて、いじれるってのが、そのブログに参加してる感を出せていいですよね。
映画の方も、オリンピックにカーリング女子日本代表として出場したチーム「シムソンズ」の実話をもとにした作品で、北海道の北の方に住む普通の女子高生4人がチームを結成し、五輪を目指すまでを描く青春映画で、スウィングガールとかウォーターボーイズのようなノリの映画みたいです。
この4人組を演じるのは加藤ローサ、星井七瀬、高橋真唯、藤井美菜。
さらに大泉洋もでてたりして、出演者も魅力的。
公開が本当に楽しみです。
via: 何を見ているのでしょうか? 15秒: 映画 シムソンズ ムービーブログ!
2005年12月8日木曜日
2005年12月1日木曜日
WindowsXPで音量を調節できなくなったとき
タスクバーに音量アイコンが表示されなくなっていたのに気づいて、「コントロールパネル」 -> 「サウンド、音声、およびオーディオデバイス」 -> 「音声」タブから「タスクバーに音量アイコンを配置する」をチェックして、アイコンを表示するように設定しようとしたら、
>
と怒られて音量を調整できなくなってしまいました。
なんでかわかりませんが、とりあえず原因を調べてみると、MSのサポートサイトに以下のような記事がありました。
通知領域に [音量] アイコンが表示されず、追加しようとするとエラー メッセージが表示される
どうやら、Sndvol32.exe ファイルが破損してしまったようです。
ページに書かれている通り、ファイルを展開しようと思ったんですが、僕のLet'sノートにはWindowのCDがついてません。どうしたものかともう少し調べてみると、dynabookのサポートページで同じ問題への対処方法を発見。
タスクバーに音量アイコンが表示されない<Windows(R)XP>: dynabook.comサポート情報
これによるとdynabookでは、修復に必要なファイル「sndvol32.ex_」がc:\windows\i386にあるようなので、Let'sノートにもあるかなと見てみたら、案の定ありました。
あとはこのページの説明にしたがって、
>
して再起動したら、音量を調節できるようになりました。
めでたしめでたし。
>
[ボリューム コントロール] がインストールされていないので、音量の調節をタスク バーに表示することはできません。コントロール パネルの [プログラムの追加と削除] を使ってインストールしてください。<
と怒られて音量を調整できなくなってしまいました。
なんでかわかりませんが、とりあえず原因を調べてみると、MSのサポートサイトに以下のような記事がありました。
通知領域に [音量] アイコンが表示されず、追加しようとするとエラー メッセージが表示される
どうやら、Sndvol32.exe ファイルが破損してしまったようです。
ページに書かれている通り、ファイルを展開しようと思ったんですが、僕のLet'sノートにはWindowのCDがついてません。どうしたものかともう少し調べてみると、dynabookのサポートページで同じ問題への対処方法を発見。
タスクバーに音量アイコンが表示されない<Windows(R)XP>: dynabook.comサポート情報
これによるとdynabookでは、修復に必要なファイル「sndvol32.ex_」がc:\windows\i386にあるようなので、Let'sノートにもあるかなと見てみたら、案の定ありました。
あとはこのページの説明にしたがって、
>
<
cd c:\windows\i386
expand -r sndvol32.ex_ c:\windows\system32
exit
して再起動したら、音量を調節できるようになりました。
めでたしめでたし。
2005年11月23日水曜日
ライブドアでセミナー
12月13日(火)にライブドアで興味深いセミナーが開催されるみたいです。
ライブドア|次世代テクノロジーセミナーシリーズ
ぜひ聞きたかったんですが、出張に行ってて申し込み受け付けているのに気づかず、すでに締め切りに。。。
キャンセル待ちってないのでしょうかw
ライブドア|次世代テクノロジーセミナーシリーズ
ぜひ聞きたかったんですが、出張に行ってて申し込み受け付けているのに気づかず、すでに締め切りに。。。
キャンセル待ちってないのでしょうかw
2005年11月14日月曜日
PORTABLE MEDIA EXPO雑感
オンタリオで2日間行われたPORTABLE MEDIA EXPOに行ってきました。
会場全体は想像していたよりこじんまりとしてました。中にはPodcastを配信しているブースや、iPod用のケースや、装飾品を展示しているブース、Podcast用の音声を作成するソフトを展示しているブースなど、様々なジャンルのブースが60個くらい入っていましたが、そのほとんどがPodcastに関するものでPORTABLE MEDIA EXPOというよりPodcast EXPOといった感じでした。
その中で印象的だったのが、ブース内で番組を撮影し、ライブ配信していた、「LA Podcaster」や「PodcastPickle.com」のブース。
動画はLA PodcastersとPodcastPickle.comでの番組撮影の様子です。
LA Podcasterのブースでは撮影していたら、話しかけられて、あたふたしてしまいました。
[Podcast][Ontario][PORTABLE MEDIA EXPO]
撮影中はなしかけられてあたふた
created by horiuchi.
[PORTABLE MEDIA EXPO][Ontatio][Podcast]
会場のあちこちでライブが行われてました
created by horiuchi.
来場者は、1日目は金曜で平日ということもあってか、そんなに多いとは感じませんでしたが、2日目の今日は、かなりの人でにぎわっていました。特にKFI AM640の公開番組を収録していたブースはIT ConversationのDoug Kayeが出演していたからか、恐ろしく人が集まっていました。アナウンスによると22カ国、5000人近くの人が会場に訪れたそうです。
今回のイベントを通して、感じたのは本場アメリカのPodcastは個人主導であるようだということ。
日本では、企業がPodcastを使ってマーケティングに成功とか、ラジオ局が次々にPodcasing開始というような話題の方が取り上げられがちですが、アメリカでは目立ちたい、情報発信したい、面白いことしたいという情熱を持った個人が人気Podcasterになって情報を発信する一方、大手ラジオ局でPodcastingを配信してるところは実はそんなに多くなかったりするようです。
ただ、アメリカでもPodcastを使ってどうやってお金を稼ぐかということについては、まぁこれから、考えるよっというような感じで、その部分に関してはまだ答えは見つかってなくて、試行錯誤の段階なのかなというのも感じました。
会場内を撮影した写真をいくつかこちらにアップしました。
会場全体は想像していたよりこじんまりとしてました。中にはPodcastを配信しているブースや、iPod用のケースや、装飾品を展示しているブース、Podcast用の音声を作成するソフトを展示しているブースなど、様々なジャンルのブースが60個くらい入っていましたが、そのほとんどがPodcastに関するものでPORTABLE MEDIA EXPOというよりPodcast EXPOといった感じでした。
その中で印象的だったのが、ブース内で番組を撮影し、ライブ配信していた、「LA Podcaster」や「PodcastPickle.com」のブース。
動画はLA PodcastersとPodcastPickle.comでの番組撮影の様子です。
LA Podcasterのブースでは撮影していたら、話しかけられて、あたふたしてしまいました。
[Podcast][Ontario][PORTABLE MEDIA EXPO]
撮影中はなしかけられてあたふた
created by horiuchi.
[PORTABLE MEDIA EXPO][Ontatio][Podcast]
会場のあちこちでライブが行われてました
created by horiuchi.
来場者は、1日目は金曜で平日ということもあってか、そんなに多いとは感じませんでしたが、2日目の今日は、かなりの人でにぎわっていました。特にKFI AM640の公開番組を収録していたブースはIT ConversationのDoug Kayeが出演していたからか、恐ろしく人が集まっていました。アナウンスによると22カ国、5000人近くの人が会場に訪れたそうです。
今回のイベントを通して、感じたのは本場アメリカのPodcastは個人主導であるようだということ。
日本では、企業がPodcastを使ってマーケティングに成功とか、ラジオ局が次々にPodcasing開始というような話題の方が取り上げられがちですが、アメリカでは目立ちたい、情報発信したい、面白いことしたいという情熱を持った個人が人気Podcasterになって情報を発信する一方、大手ラジオ局でPodcastingを配信してるところは実はそんなに多くなかったりするようです。
ただ、アメリカでもPodcastを使ってどうやってお金を稼ぐかということについては、まぁこれから、考えるよっというような感じで、その部分に関してはまだ答えは見つかってなくて、試行錯誤の段階なのかなというのも感じました。
会場内を撮影した写真をいくつかこちらにアップしました。
2005年11月9日水曜日
PORTABLE MEDIA EXPOに行ってきます
11月11~12日に開催されるPORTABLE MEDIA EXPOに行ってきます。
今日の夕方の便で現地に飛んで、15日に帰国します。
ポッドキャスティングはブログと同じくらいにポピュラーなものになるのか?、現在どれくらいポッドキャスティング界隈が盛り上がっているのか?そんなところを肌で感じてきたいと思ってます。
今日の夕方の便で現地に飛んで、15日に帰国します。
ポッドキャスティングはブログと同じくらいにポピュラーなものになるのか?、現在どれくらいポッドキャスティング界隈が盛り上がっているのか?そんなところを肌で感じてきたいと思ってます。
2005年11月6日日曜日
Sledgeドキュメント公開!!
Sledgeのドキュメントをにぽたんさんが公開されてます。
Sledge ドキュメント - にぽたん研究所
先日のshibuya.pmテクニカルトーク#6でのCatalystマンセームードに反抗すべく公開ということですが、Sledgeマンセーな僕にとってはうれしい限り。この勢いでドキュメントが整備されて、SledgeをCPANに登録!ってことにはならないでしょうか。。なるといいなぁ。。
そういえば前に社内でSledgeのドキュメント作ろうって話になって、書き始めたけど結局完成しなかった、ってことがあったんですが、あれどうなってるんだろう?
Sledge ドキュメント - にぽたん研究所
先日のshibuya.pmテクニカルトーク#6でのCatalystマンセームードに反抗すべく公開ということですが、Sledgeマンセーな僕にとってはうれしい限り。この勢いでドキュメントが整備されて、SledgeをCPANに登録!ってことにはならないでしょうか。。なるといいなぁ。。
そういえば前に社内でSledgeのドキュメント作ろうって話になって、書き始めたけど結局完成しなかった、ってことがあったんですが、あれどうなってるんだろう?
2005年11月5日土曜日
shibyya.pm テクニカルトーク#6に行ってきました。
shibyya.pm テクニカルトーク#6に行ってきました。告知から開催までの期間がかなり短かったにもかかわらず、会場は満員。少し遅れていったのですが、席は満席で立ち見になってしまいました。
これが会場が満席の様子。120人強いたみたいです。さすが世界最大のperl mongersです。恐るべし。
今回印象に残ったのは、発表直前までデモ用のコードをいじってたnaoyaさんの後ろ姿でしょうかw
それと2次会であんのうんぷれいすのなかの人といろいろお話できたのが刺激になりました。2pass試さねば。
これが会場が満席の様子。120人強いたみたいです。さすが世界最大のperl mongersです。恐るべし。
今回印象に残ったのは、発表直前までデモ用のコードをいじってたnaoyaさんの後ろ姿でしょうかw
それと2次会であんのうんぷれいすのなかの人といろいろお話できたのが刺激になりました。2pass試さねば。
2005年11月2日水曜日
Sledge::Plugin::Prototype 0.02
伏原さんより、いただいたパッチをそのまま適用して、show_prototype_jsメソッドを追加したSledge::Plugin::Prototype-0.02をアップしました。
Sledge::Plugin::Prototype - HTML::Prototype wrapper
いままで、prototype.jsのソースコードは [% prototype.define_javascript_functions %]を使ってテンプレートに直接埋め込む方法しか取れませんでしたが、
今回追加したshow_prototype_jsを使えば、prototype.js自体を吐き出すPagesクラスを作れます。
伏原さんパッチどうもありがとうございました。
Sledge::Plugin::Prototype - HTML::Prototype wrapper
いままで、prototype.jsのソースコードは [% prototype.define_javascript_functions %]を使ってテンプレートに直接埋め込む方法しか取れませんでしたが、
今回追加したshow_prototype_jsを使えば、prototype.js自体を吐き出すPagesクラスを作れます。
伏原さんパッチどうもありがとうございました。
2005年10月28日金曜日
Sledge::Plugin::IfModifiedSince
ひさしぶりにSledgeのプラグインを書いてみました。
Sledge::Plugin::IfModifiedSince 0.01
<追記 date="2005/10/30">上のリンク先が404だったのを直しておきました。失礼しました</追記>
If-Modified-Sinceヘッダからコンテンツが更新されたかを判定するif_modified_sinceメソッドと、レスポンスとしてNot Modifiedを返すnot_modifiedメソッドをPagesクラスにインポートします。
各メソッドはこんな感じで使います。
>
If-Modified-Sinceを投げてくれるやさしいエージェントにはこちらもやさしくしないとってことでちょこっと書いてみました。
Sledge::Plugin::IfModifiedSince 0.01
<追記 date="2005/10/30">上のリンク先が404だったのを直しておきました。失礼しました</追記>
If-Modified-Sinceヘッダからコンテンツが更新されたかを判定するif_modified_sinceメソッドと、レスポンスとしてNot Modifiedを返すnot_modifiedメソッドをPagesクラスにインポートします。
各メソッドはこんな感じで使います。
>
<
package Your:Pages;
use Sledge::Plugin::IfModifiedSince;
sub dispatch_foo {
my $self = shift;
my $last_modified_epoch = ...;
unless ( $self->if_modified_since($last_modified_epoch) ) {
$self->not_modified;
return;
}
}
If-Modified-Sinceを投げてくれるやさしいエージェントにはこちらもやさしくしないとってことでちょこっと書いてみました。
2005年10月27日木曜日
Shibuya Perl Mongers テクニカルトーク #6
Perlっ子なら誰もが参加したいであろうShibuya Perl Mongersテクニカルトークの6回目、Shibuya Perl Mongers テクニカルトーク #6が11月2日に開催されるそうなので、僕も早速申し込みました。
miyagawaさんのSixApartのカルチャーと開発手法はぜひ聞いてみたい!
Ajax,Catalystなどの旬な技術の紹介も面白そうですし、今回もおなかいっぱいになりそうなこゆーい内容になってます。
miyagawaさんのSixApartのカルチャーと開発手法はぜひ聞いてみたい!
Ajax,Catalystなどの旬な技術の紹介も面白そうですし、今回もおなかいっぱいになりそうなこゆーい内容になってます。
2005年10月13日木曜日
マクロメディアから「Studio 8 日本語版」発売
12日にマクロメディアからStudio 8 日本語版が発売されましたね。
Dreamweaver8はCSSの編集機能が強化されたり、ガイドが使えるようになったり、アクセシビリティのチェックができたりとかなり機能が強化されているようです。
CSSの編集はFirefoxのプラグインを使ってやってたので、今回のバージョンアップでどれだけ、簡単にCSSをいじることができるようになったのか楽しみ。
トライアル版がダウンロードできるので、早速試してみたいと思います。
マクロメディア「Studio 8 日本語版」はケータイやビデオなどに注力--RSSもサポート - CNET Japan
Dreamweaver8はCSSの編集機能が強化されたり、ガイドが使えるようになったり、アクセシビリティのチェックができたりとかなり機能が強化されているようです。
CSSの編集はFirefoxのプラグインを使ってやってたので、今回のバージョンアップでどれだけ、簡単にCSSをいじることができるようになったのか楽しみ。
トライアル版がダウンロードできるので、早速試してみたいと思います。
マクロメディア「Studio 8 日本語版」はケータイやビデオなどに注力--RSSもサポート - CNET Japan
Sleipnir2.0正式版を使ってみた
ちょっと前にリリースされたらしいSleipnir2.0を使ってみました。最近はHTMLとCSS,JavaScriptをいじることが多くなったので、Firefoxを常用していたのですが、それに比べるとこのSleipnir2.0、かなりさくさく動く印象です。
あまりいじっている時間がないので、インストールして、特に何も設定せずデフォルトの状態で使用していますが、マウスジェスチャーも最初から使えるし、タブを開いたままブラウザを閉じても次回起動時に閉じたときの状態を復元してくれるので、十分便利に使えます。それにCPUもそんなに使っていない感じ。
かなーりいい感じです。
via: タブブラウザ Sleipnir 公式ページ(上級者向け)
あまりいじっている時間がないので、インストールして、特に何も設定せずデフォルトの状態で使用していますが、マウスジェスチャーも最初から使えるし、タブを開いたままブラウザを閉じても次回起動時に閉じたときの状態を復元してくれるので、十分便利に使えます。それにCPUもそんなに使っていない感じ。
かなーりいい感じです。
via: タブブラウザ Sleipnir 公式ページ(上級者向け)
2005年10月3日月曜日
MT3.2をapacheのハンドラとして動かす
MT3.2のユーザーインターフェースが秀逸だと聞いて、どうしても見たくなり、hori-uchi.comのMTを3.2へバージョンアップしてみました。
すると、数回アクセスすると、502 Proxy Errorが出るように。。
hori-uchi.comはフロントにApache2.0を置きここでhtmlなどの静的なコンテンツを処理し、バックエンドのapache1.3+mod_perlでApache::Registryを使ったCGIのエミュレート環境でMovableTypeを動かしています。
バックエンドへのリクエストの受け渡しはmod_proxyを使って行っています。
この構成の構築方法は
Techknow Movable Type: Apache 2.0 mod_proxy によるリバース・プロキシの構築
に詳しく解説されています。
502のエラーが出たときのapacheのログを見ると、バックエンドは正常にレスポンスを返していますが、それを受け取るフロントがおかしなレスポンスだと判断し、502をクライアントに返しているようです。
そこで「MT3.2 mod_perl」でググってみると次のようなエントリが見つかりました。
Movable Type 3.2 User Manual: Running Movable Type With mod_perl
MT3.2のマニュアルの一部です。
内容はMT3.2をmod_perlで動かして高速化ってな話ですが、MTをapacheのハンドラとして動かしてより高速化するという内容まで書いてあります。
apacheのハンドラとして動かせばApache::Registryを使ったCGIのエミュレート環境より高速に動きますし、これで502のエラーもなくなるかもと思い、早速実践。
上記エントリの内容をそのまま実践しました。ただ一点、mt.cfgのCGIPathは
http://my.server.com/mt/でなく、http://my.server.com/mt/appにする必要がありました。
訂正:上記マニュアルの内容に加えて、mt.cfgに
>
の一行を追加する必要がありました。
設定を完了し、apacheを再起動すると、MTの動作が高速なったうえ、502のProxyErrorもでなくなりました。めでたしめでたし。
でもなんでProxyErrorが出たのか納得のいく答えがわからず、ちょっと消化不良ぎみ。。
すると、数回アクセスすると、502 Proxy Errorが出るように。。
hori-uchi.comはフロントにApache2.0を置きここでhtmlなどの静的なコンテンツを処理し、バックエンドのapache1.3+mod_perlでApache::Registryを使ったCGIのエミュレート環境でMovableTypeを動かしています。
バックエンドへのリクエストの受け渡しはmod_proxyを使って行っています。
この構成の構築方法は
Techknow Movable Type: Apache 2.0 mod_proxy によるリバース・プロキシの構築
に詳しく解説されています。
502のエラーが出たときのapacheのログを見ると、バックエンドは正常にレスポンスを返していますが、それを受け取るフロントがおかしなレスポンスだと判断し、502をクライアントに返しているようです。
そこで「MT3.2 mod_perl」でググってみると次のようなエントリが見つかりました。
Movable Type 3.2 User Manual: Running Movable Type With mod_perl
MT3.2のマニュアルの一部です。
内容はMT3.2をmod_perlで動かして高速化ってな話ですが、MTをapacheのハンドラとして動かしてより高速化するという内容まで書いてあります。
apacheのハンドラとして動かせばApache::Registryを使ったCGIのエミュレート環境より高速に動きますし、これで502のエラーもなくなるかもと思い、早速実践。
上記エントリの内容をそのまま実践しました。
http://my.server.com/mt/でなく、http://my.server.com/mt/appにする必要がありました。
訂正:上記マニュアルの内容に加えて、mt.cfgに
>
<
AdminScript app
の一行を追加する必要がありました。
設定を完了し、apacheを再起動すると、MTの動作が高速なったうえ、502のProxyErrorもでなくなりました。めでたしめでたし。
でもなんでProxyErrorが出たのか納得のいく答えがわからず、ちょっと消化不良ぎみ。。
2005年9月30日金曜日
続・onload時に複数のfunctionを実行するJavaScript
ちょっと前に書いたonload時に複数のfunctionを実行するJavascriptというエントリーへのkoさんのコメントでaddEventListenerというのを初めて知りました。
これは何なんだろうということで、調べてみると、W3C DOM Level2 のイベントモデルでイベントハンドリングを行う際に使う関数だということがわかりました。
もう少し調べてみると、このDOM Level2、FirefoxなどMozilla系のブラウザには実装されているようなのですが、IEには実装されていないため、addEventListenerが使えず、そのかわりに同等の機能をもったattachEventという関数が定義されているそうです。
将来的にはIEもDOM Level2をサポートして、addEventListenerが使えるようになると思いますが、現状では、ブラウザを判定してaddEventListenerを使うか、attachEventを使うかを切り替える必要がありそうです。うーん、めんどくさい。。
なので、ブラウザに依存しない前回書いた方法もまんざら無駄骨ということもなかったかな、と思っていたんですが、昨日友人にイベントの登録はprototype使えば簡単にできるよといわれ、無駄骨だったことが確定しましたw
prototype.jsを使ったonload時に実行するfunctionの登録はこんな感じです。
>
prototype.jsで定義されているEvent.observeを使って関数を登録します。引数は最初に対象となるオブジェクトを渡すところ以外はaddEventListenerと同じです。IE6とFirefox1.0.7で動作することを確認しました。
IEと、Firefoxでは関数の実行順が逆になってましたが、DOM Level2でもイベントの実行順は定義されてないことと、そもそも実行順に結果が依存するような関数はひとつにまとめておくべきだと思うので、これは問題にならなそうです。
prototypeにはこれ以外にもまだまだ知らない便利な関数、クラスがたくさんありそうです。prototype恐るべし。
これは何なんだろうということで、調べてみると、W3C DOM Level2 のイベントモデルでイベントハンドリングを行う際に使う関数だということがわかりました。
もう少し調べてみると、このDOM Level2、FirefoxなどMozilla系のブラウザには実装されているようなのですが、IEには実装されていないため、addEventListenerが使えず、そのかわりに同等の機能をもったattachEventという関数が定義されているそうです。
将来的にはIEもDOM Level2をサポートして、addEventListenerが使えるようになると思いますが、現状では、ブラウザを判定してaddEventListenerを使うか、attachEventを使うかを切り替える必要がありそうです。うーん、めんどくさい。。
なので、ブラウザに依存しない前回書いた方法もまんざら無駄骨ということもなかったかな、と思っていたんですが、昨日友人にイベントの登録はprototype使えば簡単にできるよといわれ、無駄骨だったことが確定しましたw
prototype.jsを使ったonload時に実行するfunctionの登録はこんな感じです。
>
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Event observe sample</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<script type="text/javascript" src="/js/prototype-1.3.1.js"></script>
<script type="text/javascript">
function foo() {alert('foo')}
function bar() {alert('bar')}
function baz() {alert('baz')}
Event.observe(window, 'load', foo, false);
Event.observe(window, 'load', bar, false);
Event.observe(window, 'load', baz, false);
</script>
</head>
<body></body>
</html>
prototype.jsで定義されているEvent.observeを使って関数を登録します。引数は最初に対象となるオブジェクトを渡すところ以外はaddEventListenerと同じです。IE6とFirefox1.0.7で動作することを確認しました。
IEと、Firefoxでは関数の実行順が逆になってましたが、DOM Level2でもイベントの実行順は定義されてないことと、そもそも実行順に結果が依存するような関数はひとつにまとめておくべきだと思うので、これは問題にならなそうです。
prototypeにはこれ以外にもまだまだ知らない便利な関数、クラスがたくさんありそうです。prototype恐るべし。
Movable Type 3.2 日本語版の提供を開始
Movable Type 3.2 日本語版がリリースされたみたいですね。
落ち着いたら移行しよっと。
via: Six Apart - MovableType News: Movable Type 3.2 日本語版の提供を開始
落ち着いたら移行しよっと。
via: Six Apart - MovableType News: Movable Type 3.2 日本語版の提供を開始
2005年9月29日木曜日
Google VideoでFlashVideoを採用!
なんとGoogleVideoがムービーの再生にFlashを採用しました!
Googleがオープンソースでない技術を採用したのにちょっとびっくり。
次世代のムービーの標準になったらいいなー。
Google Video Help
Googleがオープンソースでない技術を採用したのにちょっとびっくり。
How do I playback video?
In order to playback video on Google Video, you simply need to have Macromedia Flash Player installed on your computer. Once installed, you will be able to playback the video from within your browser.
次世代のムービーの標準になったらいいなー。
Google Video Help
2005年9月19日月曜日
onload時に複数のfunctionを実行するJavaScript
昨日に引き続きJavaScriptねたです。
ページを表示した時点でJavaScriptを実行したい場合、
>
のようにwindowオブジェクトのonloadイベントに実行したいfunctionをセットしてやればいいのですが、これだと、オンロード時にひとつのfunctionしか実行できません。
そこで、オンロード時に複数のfunctionを実行できるようなスクリプトを書いてみました。今回のコードはnaoyaさんのprototype.js でデザインパターン - IteratorのエントリにあるIteratorパターンのコードをそのまま借りたリスペクト指向プログラミングになってますw
>
使用方法はこんな感じです。
動作させるにはprototype.jsが必要なので最初にインクルードしています。
>
まず、multiple_onload.jsをインクルードしておきます。そして、定義したfunctionをappendFunctionメソッドを使ってセットしておきます。
これでfoo,bar,bazがオンロード時に順番に実行されます。
ページを表示した時点でJavaScriptを実行したい場合、
>
<
window.onload=function(){ alert('called when window is loaded.'); }
のようにwindowオブジェクトのonloadイベントに実行したいfunctionをセットしてやればいいのですが、これだと、オンロード時にひとつのfunctionしか実行できません。
そこで、オンロード時に複数のfunctionを実行できるようなスクリプトを書いてみました。今回のコードはnaoyaさんのprototype.js でデザインパターン - IteratorのエントリにあるIteratorパターンのコードをそのまま借りたリスペクト指向プログラミングになってますw
>
<
//multiple_onload.js
var OnloadFunction = Class.create();
OnloadFunction.prototype = {
initialize : function(func) {
this.func = func;
},
getFunc : function() {
return this.func;
}
};
var OnloadFunctions = Class.create();
OnloadFunctions.prototype = {
initialize : function() {
this.last = 0;
this.functions = new Array();
},
getFunctionAt : function(index) {
return this.functions[index];
},
appendFunction : function(func) {
this.functions[this.last] = func;
this.last++;
},
getLength : function() {
return this.last;
},
iterator : function() {
return new OnloadFunctionIterator(this);
}
}
var OnloadFunctionIterator = Class.create();
OnloadFunctionIterator.prototype = {
initialize : function(functions) {
this.functions = functions;
this.index = 0;
},
hasNext : function () {
return this.index < this.functions.getLength();
},
next : function() {
return this.functions.getFunctionAt(this.index++);
}
}
var onloadFunctions = new OnloadFunctions();
function multipleOnload () {
var it = onloadFunctions.iterator();
while (it.hasNext()){
var func = it.next();
func.func();
}
}
window.onload = multipleOnload;
使用方法はこんな感じです。
動作させるにはprototype.jsが必要なので最初にインクルードしています。
>
<
<html>
<head>
<script type="text/javascript" src="/js/prototype-1.3.1.js" ></script>
<script type="text/javascript" src="/js/multiple_onload.js" ></script>
<script type="text/javascript">
functon foo() {alert('foo');}
functon bar() {alert('bar');}
functon baz() {alert('baz');}
onloadFunctions.appendFunction(new OnloadFunction(foo) );
onloadFunctions.appendFunction(new OnloadFunction(bar) );
onloadFunctions.appendFunction(new OnloadFunction(baz) );
</script>
</head>
<body>
...
</body>
</html>
まず、multiple_onload.jsをインクルードしておきます。そして、定義したfunctionをappendFunctionメソッドを使ってセットしておきます。
これでfoo,bar,bazがオンロード時に順番に実行されます。
2005年9月18日日曜日
画像のスワップをクラス名で制御するJavaScript(プリロード付き)
ちょっとJavaScriptをまじめに勉強しようかと思い始めました。
というわけで、手始めにマウスオーバーすると別画像に切り替わるスクリプトを書いてみました。
マウスオーバーで画像が切り替わるなんて、Dreamweaver使えばJavaScriptを知らなくてもできてしまうんですが、Dreameweaverが吐き出すコードはHTMLタグの中にonload="xxxxxxxx"とか、onmouseover="xxxxx"をやたらと追加して、非常に見づらいのです。
これだとテキストエディタでちょろっとHTMLを編集したい時に大変ですし、きっとGoogleさんもクロールしにくいでしょうから、imgタグに予めスワップ用に設定しておいたクラス名を記述しておけば、マウスオーバー、マウスアウトで画像が切り替わるようにしてみました。
作成したスクリプトはこんな感じです。クラス名から要素を取得するところはprototype.jsから借りてきました。
>
実際の使用例はこんな感じです。クラス名により画像のスワップを制御するようにすることで、HTMLがすっきりしました。さらにhead要素内のscriptタグを削除してもValidなHTMLのままってところもいいですよね。
>
というわけで、手始めにマウスオーバーすると別画像に切り替わるスクリプトを書いてみました。
マウスオーバーで画像が切り替わるなんて、Dreamweaver使えばJavaScriptを知らなくてもできてしまうんですが、Dreameweaverが吐き出すコードはHTMLタグの中にonload="xxxxxxxx"とか、onmouseover="xxxxx"をやたらと追加して、非常に見づらいのです。
これだとテキストエディタでちょろっとHTMLを編集したい時に大変ですし、きっとGoogleさんもクロールしにくいでしょうから、imgタグに予めスワップ用に設定しておいたクラス名を記述しておけば、マウスオーバー、マウスアウトで画像が切り替わるようにしてみました。
作成したスクリプトはこんな感じです。クラス名から要素を取得するところはprototype.jsから借りてきました。
>
<
// swap_image.js
var imagesNormal = new Object();
var imagesHilite = new Object();
function SwapImage (name,normalSrc,hiliteSrc) {
this.name = name;
this.normalSrc = normalSrc;
this.hiliteSrc = hiliteSrc;
}
function setupSwapImages(swapImages) {
preloadSwapImages(swapImages);
setupSwapEvent(swapImages);
}
function preloadSwapImages (a) {
for (var i=0; i < a.length; i++){
imagesNormal[a[i].name] = new Image();
imagesNormal[a[i].name].src = a[i].normalSrc;
imagesHilite[a[i].name] = new Image();
imagesHilite[a[i].name].src = a[i].hiliteSrc;
}
}
function setupSwapEvent (a) {
for (var i=0; i<a.length; i++){
var images = getElementsByClassName(a[i].name);
for (var j=0; j<images.length; j++){
var image = images[j];
if (image.getAttribute("src")){
image.onmouseover = function () {swapImage( this, "hilite" );}
image.onmouseout = function () {swapImage( this, "normal" );}
}
}
}
}
// 2006-05-15追記
function swapImage(image,type){
if (type=="hilite") {
image.src = imagesHilite[image.className].src;
} else if (type=="normal") {
image.src = imagesNormal[image.className].src;
}
}
// 追記ここまで(こぴぺしわすれ・・。)
// copied from prototype.js v1.3.1
// http://prototype.conio.net/
function getElementsByClassName (className) {
var children = document.getElementsByTagName('*') || document.all;
var elements = new Array();
for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(' ');
for (var j = 0; j < classNames.length; j++) {
if (classNames[j] == className) {
elements.push(child);
break;
}
}
}
return elements;
}
実際の使用例はこんな感じです。クラス名により画像のスワップを制御するようにすることで、HTMLがすっきりしました。さらにhead要素内のscriptタグを削除してもValidなHTMLのままってところもいいですよね。
>
<
<html>
<head>
<script type="text/javascript" src="/js/swap_image.js" ></script>
<script type="text/javascript">
var swapImages = [
new SwapImage('class01','/images/foo.gif', '/images/foo_onmouse.gif'),
new SwapImage('class02','/images/bar.gif', '/images/bar_onmouse.gif'),
new SwapImage('class03','/images/baz.gif', '/images/baz_onmouse.gif')
];
window.onload = function () {setupSwapImages(swapImages);};
</script>
</head>
<body>
<img src="/images/foo.gif" class="class01" />
<img src="/images/bar.gif" class="class02" />
<img src="/images/baz.gif" class="class03" />
</body>
</html>
2005年9月15日木曜日
Sledge::Dispatcherリリース
Sledge用のmod_perlハンドラSledge::Dispatcherがリリースされたみたいです。
トリガのCGIファイルを作らないですむのはかなり便利ですね。
もうひとつ僕がいいなーとおもったのは、URLからPages内のdispatchメソッドがどこにあるかわかりやすくなるなーという点。
トリガのCGIファイルを使う場合、CGIファイル内に呼び出すPagesクラスを記述するのですが、Pagesクラスならどのクラスも
呼べるので、適当に設計して作っていると、URLとPagesクラスが対応しなくなっちゃうときがあるんです。特に僕はちょっと考えたら、
まず手を動かしちゃう人なので、うまく対応しなくなってCGIファイルを編集しなおしなんてことをよくやっちゃいます。
なので、dispatchメソッドを書いた時点でURLが決定するSledge::Dispatcherはかなりイイ!と思いました。
via: #!shebang.jp:Sledge::Dispatcher
トリガのCGIファイルを作らないですむのはかなり便利ですね。
もうひとつ僕がいいなーとおもったのは、URLからPages内のdispatchメソッドがどこにあるかわかりやすくなるなーという点。
トリガのCGIファイルを使う場合、CGIファイル内に呼び出すPagesクラスを記述するのですが、Pagesクラスならどのクラスも
呼べるので、適当に設計して作っていると、URLとPagesクラスが対応しなくなっちゃうときがあるんです。特に僕はちょっと考えたら、
まず手を動かしちゃう人なので、うまく対応しなくなってCGIファイルを編集しなおしなんてことをよくやっちゃいます。
なので、dispatchメソッドを書いた時点でURLが決定するSledge::Dispatcherはかなりイイ!と思いました。
via: #!shebang.jp:Sledge::Dispatcher
2005年9月12日月曜日
Class::DBI 3.0.1の中身は0.96
MFPMのRecent MailでClass::DBIが3.0.1にバージョンアップしたことを知りました。
search.cpan.org: Tony Bowden / Class-DBI-3.0.1
早速何が変わったのかChangesを見てみると、、
>
ということで、中身は0.96と同じで、バージョンを付け直しただけみたいです。
これから大きなバージョンアップを行う下準備というところでしょうか。
search.cpan.org: Tony Bowden / Class-DBI-3.0.1
早速何が変わったのかChangesを見てみると、、
>
<
3.0.1 UNRELEASED
- Code is identical to 0.96
- New section added to documentation on Release Philosophy
- Replace eq_set with is_deeply in t/04 to work around Test::More bug
3.0.0 UNRELEASED
- IDENTICAL to 0.96. Only difference is version renumbering.
ということで、中身は0.96と同じで、バージョンを付け直しただけみたいです。
これから大きなバージョンアップを行う下準備というところでしょうか。
2005年9月3日土曜日
2005年9月1日木曜日
ぐっさんのムービーブログがスタートしました。
OCNムービーブログの第2弾、ぐっさんこと山口智充さんによる「ぐっさん部屋 > 山口智充ムービーブログ 15秒のドウガ」が本日スタートしました。
初回からかなり体を張ったムービーになってますw
ちなみに相武紗季さんのときと同じく、ムービーティッカーも同時に提供しています。
実際に貼り付けるとこんな感じ。
貼り付け用のHTMLはこちらから取得できます。
初回からかなり体を張ったムービーになってますw
ちなみに相武紗季さんのときと同じく、ムービーティッカーも同時に提供しています。
実際に貼り付けるとこんな感じ。
貼り付け用のHTMLはこちらから取得できます。
2005年8月31日水曜日
Redhat Linuxで1枚のNICに複数のIPアドレスを割り当てる
今の今まで1枚のNICには1つのIPアドレスしか割り当てられないと思い込んでいたのですが、さっき友人に「WindowsではできるよLinuxでもできるんじゃない?」といわれたので、ちょっと調べてみました。
すると以外に簡単にできることが判明。以下その手順です。
>
/etc/sysconfig/network-scripts/ifcfg-eth0をコピーしてデバイス名とIPアドレスを直して、NICを再起動するだけでした。
これを使えば同じポート番号で2つ以上ソフトを動かしたりできますね。
すると以外に簡単にできることが判明。以下その手順です。
>
<
[root]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
[root]#cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1
[root]#vi /etc/sysconfig/network-scripts/ifcfg-eth0\:1
[root]#cat /etc/sysconfig/network-scripts/ifcfg-eth0\:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
[root]#/etc/init.d/network restart
[root]#/sbin/ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3628231 errors:0 dropped:0 overruns:0 frame:0
TX packets:2719218 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2803068698 (2673.2 Mb) TX bytes:616666033 (588.0 Mb)
Interrupt:11 Base address:0x8000
eth0:1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3628231 errors:0 dropped:0 overruns:0 frame:0
TX packets:2719218 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2803068698 (2673.2 Mb) TX bytes:616666033 (588.0 Mb)
Interrupt:11 Base address:0x8000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6869 errors:0 dropped:0 overruns:0 frame:0
TX packets:6869 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:654293 (638.9 Kb) TX bytes:654293 (638.9 Kb)
/etc/sysconfig/network-scripts/ifcfg-eth0をコピーしてデバイス名とIPアドレスを直して、NICを再起動するだけでした。
これを使えば同じポート番号で2つ以上ソフトを動かしたりできますね。
2005年8月28日日曜日
2005年8月25日木曜日
Google talk試してみました
Google発のIM「Google talk」も早速試してみました。
利用するにはGmailのアカウントが必要です。ログインするとGmailの新着メールがポップアップででてきたり、メッセンジャー中のメールマークを押すとGmailの新規メール作成ページに飛んだりと、GmailとGoogle talkをシームレスに行ったりきたりできていい感じです。
via: Google Talk
利用するにはGmailのアカウントが必要です。ログインするとGmailの新着メールがポップアップででてきたり、メッセンジャー中のメールマークを押すとGmailの新規メール作成ページに飛んだりと、GmailとGoogle talkをシームレスに行ったりきたりできていい感じです。
via: Google Talk
MSNメッセンジャー7.5
メインで使っているメッセンジャーのMSNメッセンジャーが7.5にバージョンアップしたそうなので、早速インストール。見た目で変わったのはログイン画面と音声メモボタンがついたところくらいでしょうか。最近たまにメッセンジャーが暴走してCPU100%使うことがしばしばあったので、このバージョンアップでそれが直らないかなとひそかに期待しています。
via: マイクロソフト、MSN メッセンジャー 7.5をリリース--音声メモ機能など追加 - CNET Japan
via: マイクロソフト、MSN メッセンジャー 7.5をリリース--音声メモ機能など追加 - CNET Japan
2005年8月23日火曜日
クリックするとすべて選択されるテキストエリア
GoogleAdsenseのテキストエリア
created by horiuchi.
GoogleAdsenseのAdsenseコードを表示するテキストエリアがちょっと便利。クリックすると、テキストエリア内のコードがすべて選択された状態になるので、あとは右クリックしてコピーするだけでOK。ちょっとした気遣いだけど、これだけですごく使い勝手がよくなっている気がします。
実際どうやって実現しているのかなとコードを覗いてみると、こんな感じ。
>
<
<textarea readonly rows="12" cols="65" onclick="this.focus();this.select()" id="code">
標準関数のfocus()とselect()を使うだけでできてしまうので、非常に簡単ですね。早速まねしよう。
2005年8月21日日曜日
2005年8月17日水曜日
Class::DBI::Sweet
CDBIのメーリングリストを眺めていたら、複数のテーブルにまたがった検索なんかをClass::DBI::Sweetを使えば簡単にできるよみたいな投稿があったので、マニュアルを眺めてみましたが結構いろいろできそう。
ざっと見た感じ
-Class::DBI::PagerのようなData::Pageを利用したページング
-Class::DBI::Plguin::CountSearchでできるようなカウント検索
-SQL::Abstractを使った複雑な検索
-JOINを使った検索
-retrieve_allでorder_by
-キャッシング機能
といったようにかゆいところに手が届く機能が満載です。
それぞれの機能は個別のプラグインとしてだいたいCPANにアップされてますが、これひとつですべて住むってのは便利かも。
ざっと見た感じ
-Class::DBI::PagerのようなData::Pageを利用したページング
-Class::DBI::Plguin::CountSearchでできるようなカウント検索
-SQL::Abstractを使った複雑な検索
-JOINを使った検索
-retrieve_allでorder_by
-キャッシング機能
といったようにかゆいところに手が届く機能が満載です。
それぞれの機能は個別のプラグインとしてだいたいCPANにアップされてますが、これひとつですべて住むってのは便利かも。
2005年8月8日月曜日
flashcastingとか言ってみる
先週末、FlipClipにRSSを吐き出す機能を実装しました。
実際のRSSはこんな感じです。
http://www.flipclip.net/horiuchi/rss
RSSのバージョンは2.0を採用しています。
なぜ2.0かというと、今回新しい試みとして、Podcastライクにenclosureを使って、FlashVideo(FLV)を配信するということをしたかったからです。とりあえず、FlashVideoをCastingするということで、「flashcasting」とか言ってみます。(「flashcasting」だとswfを配信するっぽいから「flvcasting」としたほうがいいのかな。でも言いにくい。。)
現時点ではcastしても受け取るプレーヤーがありませんが、配信から先にはじめてみました。
実際のRSSはこんな感じです。
http://www.flipclip.net/horiuchi/rss
RSSのバージョンは2.0を採用しています。
なぜ2.0かというと、今回新しい試みとして、Podcastライクにenclosureを使って、FlashVideo(FLV)を配信するということをしたかったからです。とりあえず、FlashVideoをCastingするということで、「flashcasting」とか言ってみます。(「flashcasting」だとswfを配信するっぽいから「flvcasting」としたほうがいいのかな。でも言いにくい。。)
現時点ではcastしても受け取るプレーヤーがありませんが、配信から先にはじめてみました。
MIME::Lite::TT::Japanese0.06
MIME::Lite::TT::Japaneseを0.06にバージョンアップし、CPANにアップしました。
今回の変更点は2つです。
- 長すぎる本文を自動改行するようにした。
- perlのバージョンでEncodeとJcodeの利用を切り替えていたのをJcode一本にした。
最初の自動改行については、やろうやろうと思っていたのですが、ついつい先延ばしになっていたのをやっと実装しました。デフォルトで72byte以上(文字数で35文字くらい)の行は自動的に改行されます。この値は変更可能で、MIME::Lite::TT::Japaneseのインスタンス作成時に「LineWidth」という名前で渡してやればOKです。また、自動改行したくない場合は「LineWidth」に0をセットすればOKです。
この自動改行の実装にJcodeのjfoldメソッドを使っているため、今回思い切って、Encodeの使用をやめて、Jcodeで一本化しました。最新のJcodeはperl5.8以降ではEncodeのラッパーとして動作するので、バージョンの切り分けはJcodeに任せようと思ったのも一本化の要因です。
EncodeでISO-2022-JPなMIMEエンコーディングができるようになったのをきっかけにMIME::Lite::TT::Japaneseのバージョンアップを思い立ったのですが、結果として、Encodeを使わないということに。。
今回の変更点は2つです。
- 長すぎる本文を自動改行するようにした。
- perlのバージョンでEncodeとJcodeの利用を切り替えていたのをJcode一本にした。
最初の自動改行については、やろうやろうと思っていたのですが、ついつい先延ばしになっていたのをやっと実装しました。デフォルトで72byte以上(文字数で35文字くらい)の行は自動的に改行されます。この値は変更可能で、MIME::Lite::TT::Japaneseのインスタンス作成時に「LineWidth」という名前で渡してやればOKです。また、自動改行したくない場合は「LineWidth」に0をセットすればOKです。
この自動改行の実装にJcodeのjfoldメソッドを使っているため、今回思い切って、Encodeの使用をやめて、Jcodeで一本化しました。最新のJcodeはperl5.8以降ではEncodeのラッパーとして動作するので、バージョンの切り分けはJcodeに任せようと思ったのも一本化の要因です。
EncodeでISO-2022-JPなMIMEエンコーディングができるようになったのをきっかけにMIME::Lite::TT::Japaneseのバージョンアップを思い立ったのですが、結果として、Encodeを使わないということに。。
Encode 2.11
Encode 2.11がリリースされ、CPANにアップロードされています。
DanさんのエントリーEncode-2.11 releasedからトラックバックをいただいてバージョンアップを知りました。ありがとうございます。
今回のバージョンアップの目玉はなんと言ってもISO-2022-JPのMIMEエンコードに対応したことでしょう。以下のようなコードで簡単にエンコードできるみたいです。
>
これでまかまかさんのおっしゃるとおり、MIME::Lite::TT::Japaneseのコードを簡単にできそうです。
DanさんのエントリーEncode-2.11 releasedからトラックバックをいただいてバージョンアップを知りました。ありがとうございます。
今回のバージョンアップの目玉はなんと言ってもISO-2022-JPのMIMEエンコードに対応したことでしょう。以下のようなコードで簡単にエンコードできるみたいです。
>
<
$header = encode('MIME-Header-ISO_2022_JP', $utf8);
これでまかまかさんのおっしゃるとおり、MIME::Lite::TT::Japaneseのコードを簡単にできそうです。
2005年8月7日日曜日
GoogleAdsense銀行振り込み開始
GoogleAdsenseの支払い方法で銀行振り込みを選択できるようになったみたいなので、早速銀行振り込みに変更してみました。これでより簡単にAdsenseを利用できるようになりますね。
via: Google AdSense が銀行振込開始: blog.bulknews.net
via: Google AdSense が銀行振込開始: blog.bulknews.net
2005年8月4日木曜日
ウイニングイレブン9
ウイニングイレブン8を買ったもののマスターリーグでまだカストロがスタメンな僕ですが、ついついウイニングイレブンを9注文しちゃいました。それにしてもアマゾンのレビューを見ると評判はいまいちですね。たしかに選手の成長、衰退は僕もいらない気がするなー。。次回作では成長、衰退のON/OFF機能を希望!
2005年8月1日月曜日
Class::DBIの開発が大変なことになっている模様。。
Class::DBIの作者が最近立ち上げたメーリングリストを削除、さらに、アーカイブとWikiも削除してしまったそうです。
そろそろ1.0のリリースかなんて思っていたので、かなりの衝撃です。。
今後の動向に注目です。
via:Class::DBI の開発でトラブル: blog.bulknews.net
そろそろ1.0のリリースかなんて思っていたので、かなりの衝撃です。。
今後の動向に注目です。
via:Class::DBI の開発でトラブル: blog.bulknews.net
2005年7月28日木曜日
SpamAssassinいいですね
今までスパムメールについては、Thunderbirdのスパムフィルター頼りでほかには特に対策を施してなかったのですが、最近中国語人とかさちことかさゆりとかロレックス売りとかから届くメールなど、Thnderbirdがスパムと判定してくれないことが多くなってきて、スパムかなりうざーな状態でした。
そこでSpamAssassinを試してみることにしました。
このSpamAssassin、いろいろな方法でスパムメールかどうかを判定し、スパムらしさ度を点数にし、その合計がある閾値を超えるとスパムと判定。メールのヘッダにその情報(X-Spam-Flagなど)を書き込むというようなことをしてくれます。
スパムっぽかったら問答無用で削除というようなことはしないでヘッダ(スパムメールだと本文にその点数の詳細もつきます)に情報を付加するだけなので、正当なメールがなくなるなんて事はありません。
あとはヘッダの情報からメールを振り分けるなり、ゴミ箱にうつすなりすればいいわけです。
昨日から試してますが、かなりの精度でスパムを判定してくれています。
実際の導入方法は今月号のSoftwareDesignに詳しく載っています。実はこれを読んで導入しようというきになりましたw
特集記事「オープンソース+αでキメる完全無欠のメールサーバ」の中で紹介されています。この特集記事、SpamAssassinのほかにも有益な情報が載っていてお勧めです。特にsendmail、postfix、qmailの比較は非常に参考になりました。今までなんとなくpostfixを使ってましたが、今回の記事を読んでこれからもpostfixで行こうと思えました。
そこでSpamAssassinを試してみることにしました。
このSpamAssassin、いろいろな方法でスパムメールかどうかを判定し、スパムらしさ度を点数にし、その合計がある閾値を超えるとスパムと判定。メールのヘッダにその情報(X-Spam-Flagなど)を書き込むというようなことをしてくれます。
スパムっぽかったら問答無用で削除というようなことはしないでヘッダ(スパムメールだと本文にその点数の詳細もつきます)に情報を付加するだけなので、正当なメールがなくなるなんて事はありません。
あとはヘッダの情報からメールを振り分けるなり、ゴミ箱にうつすなりすればいいわけです。
昨日から試してますが、かなりの精度でスパムを判定してくれています。
実際の導入方法は今月号のSoftwareDesignに詳しく載っています。実はこれを読んで導入しようというきになりましたw
特集記事「オープンソース+αでキメる完全無欠のメールサーバ」の中で紹介されています。この特集記事、SpamAssassinのほかにも有益な情報が載っていてお勧めです。特にsendmail、postfix、qmailの比較は非常に参考になりました。今までなんとなくpostfixを使ってましたが、今回の記事を読んでこれからもpostfixで行こうと思えました。
2005年7月25日月曜日
黒武骨味玉チャーシュー麺@上野 麺屋武蔵武骨
麺屋武蔵の姉妹店武骨に行ってきました。注文したのは「黒武骨味玉チャーシュー麺」。黒い色はイカスミの油らしいです。このイカスミの油結構効いていて、後味に磯の香りが残ります。磯の香りが苦手な人は白の方がいいかも。
麺は極太麺で食べ応えがあります。
チャーシューは角煮に近く、一つがかなりでかいです。長時間煮込んでいるのか、チャーシューはちょっと味が濃かったです。チャーシューはもっと薄味でもいい気がしました。
次回は白にチャレンジ。
お店: 麺屋武蔵 武骨
住所: 台東区上野6-7-3
電話: 03-3834-6528
2005年7月21日木曜日
2005年7月20日水曜日
マッシュルームバーガー@7025 Franklin Avenue
先週日曜、五反田にあるハンバーガー屋さん「7025 フランクリン・アベニュー」に行ってきました。
注文したのはマッシュルームバーガーチーズのせの一番大きいサイズ。
お店に入るのに30も並んでいたので、おなかが減りすぎて一番大きいサイズを注文してしまいました。
肉はミディアムレアで中は赤い感じ。味は薄味なので肉の味を味わえました。
ちょっと値段は張りますが、また食べに行きたいと思えるくらいおいしかったです。
もう一つ気になったのが、シェイク。カウンター席に座ったので、目の前で、調理しているところを
見ることができたんですが、シェイクのおいしそうなこと。次に行ったときは注文します。
そうそう、このお店で偶然にもnaoyaさんに遭遇。
まさかこんなところで出会うとは。かなりびっくりしました。
7025 フランクリン・アベニュー
7025 Franklin Avenue
住所: 東京都品川区東五反田3-15-18
TEL: 03-3441-5028
livedoorBlogのAtomAPIが仕様変更
livedoor Blog 開発日誌:リニューアルに伴うランキングの変更、使用できる機能について - livedoor Blog(ブログ)
livedoorBlogのリニューアルに伴い、AtomAPIの仕様も変更されるようです。
>
エンドポイントが変わるだけなのかなー。
livedoorBlogのリニューアルに伴い、AtomAPIの仕様も変更されるようです。
>
Atom APIのURLがリニューアルに伴い変更となります。<
http://cms.blog.livedoor.com/atom
Atom APIを利用したペットなどのアプリケーションをご利用の場合は上記のURLに変更いただけますようお願いいたします。なお、このAPIのサービスにつきましてはlivedoor Blogとして正式にサポートしておりませんのでお問い合わせ等につきましてはご遠慮いただけますようお願いいたします。
エンドポイントが変わるだけなのかなー。
2005年7月8日金曜日
Class::DBI::Plugin::Factory
昨日書いたselectトリガを使ったClass::DBIのFactoryパターンをLost-SeasonのkatoさんがClass::DBIのプラグインにしてらっしゃいます。仕事はやっ!
ちなみに、Class::DBIのFactoryの実装方法について、インスタンス生成専門のFactoryクラスを別に作るという方法も考えたんですが、この実装方法だと、retrieve_allやsearchなどのリスト取得系の検索メソッドでインスタンスのリストを取得する際にサブクラスのインスタンスを生成ってところまでは感知できないので、やめにしました。
ちなみに、Class::DBIのFactoryの実装方法について、インスタンス生成専門のFactoryクラスを別に作るという方法も考えたんですが、この実装方法だと、retrieve_allやsearchなどのリスト取得系の検索メソッドでインスタンスのリストを取得する際にサブクラスのインスタンスを生成ってところまでは感知できないので、やめにしました。
2005年7月7日木曜日
selectトリガを使ったClass::DBIのFactoryパターン
以前からClass::DBIでFactoryパターンを使えたらなーと思ってました。
たとえば、有料、無料、VIPのように複数の会員タイプがあるような会員サイトを作る場合、Class::DBIを継承したMyService::MemberがFactoryとなり、会員のタイプによって、MyService::Member::Basic, MyService::Member::Free, MyService::Member::VIPというようなサブクラスのインスタンスを作成するというようなイメージです。
さらにFactoryクラスでMyService::Member->retrieve_allとかすると、適切なサブクラスのインスタンスのリストがとれると最高です。
そんなことができないかなーとClass::DBIのドキュメントやソースを眺めていたんですが、Class::DBIに組み込まれているselectトリガを使えば実現できそうだったので、試してみました。
selectトリガはインスタンス生成時に必ず呼ばれているので、ここで会員のタイプを判別し、サブクラスにreblessしてやります。ソースコードはこんな感じです。このコードそのままではないですが、実際に同じようなコードを書いて試してみたところ、うまく動いているようです。
***MyService::Member - Factory
>
*** MyService::Member::Basic - 一般会員
>
*** MyService::Member::Free - 無料会員
>
*** MyService::Member::VIP - VIP会員
>
たとえば、有料、無料、VIPのように複数の会員タイプがあるような会員サイトを作る場合、Class::DBIを継承したMyService::MemberがFactoryとなり、会員のタイプによって、MyService::Member::Basic, MyService::Member::Free, MyService::Member::VIPというようなサブクラスのインスタンスを作成するというようなイメージです。
さらにFactoryクラスでMyService::Member->retrieve_allとかすると、適切なサブクラスのインスタンスのリストがとれると最高です。
そんなことができないかなーとClass::DBIのドキュメントやソースを眺めていたんですが、Class::DBIに組み込まれているselectトリガを使えば実現できそうだったので、試してみました。
selectトリガはインスタンス生成時に必ず呼ばれているので、ここで会員のタイプを判別し、サブクラスにreblessしてやります。ソースコードはこんな感じです。このコードそのままではないですが、実際に同じようなコードを書いて試してみたところ、うまく動いているようです。
***MyService::Member - Factory
>
<
package MyService::Member
use base qw(Class::DBI);
require MyService::Member::Basic
require MyService::Member::Free
require MyService::Member::VIP
__PACKAGE__->set_db('Main', @datasource);
__PACKAGE__->table('member');
__PACKAGE__->columns(Primary => qw(member_id));
__PACKAGE__->columns(Essential => qw(member_type name age));
# select トリガにrebless用のメソッドをセット
__PACKAGE__->add_trigger( select => \&_rebless );
# サブクラスにrebless
sub _rebless {
my $self = shift;
#会員タイプ(member_type)でreblesするサブクラスを選択
my $class = 'MyService::Member::Basic';
if ($self->member_type eq 'Free'){
$class = 'MyService::Member::Free';
} elsif($self->member_type eq 'VIP'){
$class = 'MyService::Member::VIP';
}
bless $self, $class;
}
# abstract method
sub is_free {}
sub monthly_cost {}
*** MyService::Member::Basic - 一般会員
>
<
package MyService::Member::Basic;
use strict;
use base qw(MyService::Member);
sub is_free { 0 } # 無料ではない
sub monthly_cost { 500 } # 月額500円
*** MyService::Member::Free - 無料会員
>
<
package MyService::Member::Free;
use strict;
use base qw(MyService::Member);
sub is_free { 1 } # 無料
sub monthly_cost { 0 } # 月額0円
*** MyService::Member::VIP - VIP会員
>
<
package MyService::Member::VIP;
use strict;
use base qw(MyService::Member);
sub is_free { 0 } # 無料ではない
sub monthly_cost { 250 } # VIPは月額250円
2005年7月6日水曜日
2005年7月4日月曜日
2005年7月1日金曜日
Web2.0な世界ではPerlがいい
antipop2.0 - Perler な Blog を列挙祭りのエントリでhori-uchi.comを取り上げてくださっていただいたのに最近Perlの話題あんまり書いてない!ということでちょっと思うところを書いてみたいと思います。
世の中にはいろいろなプログラミング言語が存在しますが、Web2.0な世界ではPerlがいいんじゃない?って話です。
Web2.0というと幅が広いですが、ここで言うWeb2.0はアプリケーション同士がAPIを通して相互に接続される世界とします。
このWeb2.0な世界でなぜPerlがいいのか、僕が考える理由は以下の3つです。
-型のない言語
-強力な正規表現
-CPANの存在
APIの実装はRESTやXML-RPC、SOAPなどを使った、XMLをデータのフォーマットとしてやりとりするというものが一般的です。ですので、各アプリケーションはXMLを解析し、処理すると必要がでてきます。XMLをプログラム内で扱う際にはXMLデータをXMLの階層構造を表現したハッシュであるとか、構造体のような形式にする必要がありますが、型を指定しなければいけない言語だと、いかようにもできるXMLをそういうデータ形式にするのは大変だろうなーと思います。その点PerlはXML::Simpleなんかをつかうと、
という一行でXMLのデータ構造をそのまま表したハッシュに変換してくれます。
また、XMLを解析してデータ形式に変換というような作業は結構時間のかかるものですが、Perlには高速で強力な正規表現があるので、これを使って、高速に特定のデータを抜き出すなんてことも簡単にできます。
最後にCPANの存在を忘れてはいけません。今後はAPIを提供するようなサービスが次々に出てくると思います。CPANには人気があるサービスだとそれらのAPIを簡単に使えるようにしてくれるモジュールがたいてい存在しています。Net::Amazon、Net::Google、WebService::Bloglines、WebService::Hatena::Fotolifeなど数え上げればきりがありません。
これらを使えば旬なサービスを簡単に使うことができます。
こんな訳で、APIでサービス同士がつながるWeb2.0な世界では、Perlがまた脚光をあびるんじゃないかなと思いました。
世の中にはいろいろなプログラミング言語が存在しますが、Web2.0な世界ではPerlがいいんじゃない?って話です。
Web2.0というと幅が広いですが、ここで言うWeb2.0はアプリケーション同士がAPIを通して相互に接続される世界とします。
このWeb2.0な世界でなぜPerlがいいのか、僕が考える理由は以下の3つです。
-型のない言語
-強力な正規表現
-CPANの存在
APIの実装はRESTやXML-RPC、SOAPなどを使った、XMLをデータのフォーマットとしてやりとりするというものが一般的です。ですので、各アプリケーションはXMLを解析し、処理すると必要がでてきます。XMLをプログラム内で扱う際にはXMLデータをXMLの階層構造を表現したハッシュであるとか、構造体のような形式にする必要がありますが、型を指定しなければいけない言語だと、いかようにもできるXMLをそういうデータ形式にするのは大変だろうなーと思います。その点PerlはXML::Simpleなんかをつかうと、
my $xml_href = XML::Simple->XMLin($xmlfile);
という一行でXMLのデータ構造をそのまま表したハッシュに変換してくれます。
また、XMLを解析してデータ形式に変換というような作業は結構時間のかかるものですが、Perlには高速で強力な正規表現があるので、これを使って、高速に特定のデータを抜き出すなんてことも簡単にできます。
最後にCPANの存在を忘れてはいけません。今後はAPIを提供するようなサービスが次々に出てくると思います。CPANには人気があるサービスだとそれらのAPIを簡単に使えるようにしてくれるモジュールがたいてい存在しています。Net::Amazon、Net::Google、WebService::Bloglines、WebService::Hatena::Fotolifeなど数え上げればきりがありません。
これらを使えば旬なサービスを簡単に使うことができます。
こんな訳で、APIでサービス同士がつながるWeb2.0な世界では、Perlがまた脚光をあびるんじゃないかなと思いました。
Sleipnir2アルファ版をインストールしてみました
タブブラウザ Sleipnir 開発日記より
上級者向け国産タブブラウザ Sleipnir2 (アルファ版)が公開されたようなので、試しにインストールしてみました。
まだIEと同等の機能しかついていないということです。
僕は普段、Bloglinesなどで気になる記事をピックアップしとりあえず全部開いてから後でじっくり見ていくというようなブラウザの使い方をしているので、タブが30個とかざらに開いてます。旧Sleipnirではそういう使い方をしているとCPU使用率がかなり波打ってWindows自体が不安定になったりしてましたが、僕がSleipnir2を試した限りでは、たくさんタブを開いてもCPU使用率が以前ほど高くならないようです。
とりあえず感想はそれくらい。マウスジェスチャーが実装されたらもう少し本格的に使ってみようかなー。
上級者向け国産タブブラウザ Sleipnir2 (アルファ版)が公開されたようなので、試しにインストールしてみました。
まだIEと同等の機能しかついていないということです。
僕は普段、Bloglinesなどで気になる記事をピックアップしとりあえず全部開いてから後でじっくり見ていくというようなブラウザの使い方をしているので、タブが30個とかざらに開いてます。旧Sleipnirではそういう使い方をしているとCPU使用率がかなり波打ってWindows自体が不安定になったりしてましたが、僕がSleipnir2を試した限りでは、たくさんタブを開いてもCPU使用率が以前ほど高くならないようです。
とりあえず感想はそれくらい。マウスジェスチャーが実装されたらもう少し本格的に使ってみようかなー。
2005年6月27日月曜日
ジンギスカン@立川 ZIKO
先週土曜日に立川のZIKOというジンギスカン屋さんに行ってきました。
上生ラム肉、ラムカルビ、生ラム肉に野菜盛り合わせを注文しましたが、どれもうまい!!特に上生ラム肉は恐ろしく柔らかくて、ほんのり羊のにおいがして最高でした。
ジンギスカンの店 ZIKO
ぐるなび - 本場札幌炭火焼ジンギスカンの店 ジーコ
住所: 立川市錦町2-1-32YSビル 1F
電話番号: 042-527-0626
営業時間: 18:00~3:00(月・火・水・木・金・土)
17:00~23:00(日・祝日)
休業日: 不定休
交通案内: JR中央線 立川駅から徒歩3分
駐車場: なし
カード利用: 不可
上生ラム肉、ラムカルビ、生ラム肉に野菜盛り合わせを注文しましたが、どれもうまい!!特に上生ラム肉は恐ろしく柔らかくて、ほんのり羊のにおいがして最高でした。
ジンギスカンの店 ZIKO
ぐるなび - 本場札幌炭火焼ジンギスカンの店 ジーコ
住所: 立川市錦町2-1-32YSビル 1F
電話番号: 042-527-0626
営業時間: 18:00~3:00(月・火・水・木・金・土)
17:00~23:00(日・祝日)
休業日: 不定休
交通案内: JR中央線 立川駅から徒歩3分
駐車場: なし
カード利用: 不可
GoogleMapsで生まれ故郷を見てみた
[を] Google Mapsでうちも見えた!と思ったら・・・より、GoogleMapsで日本の衛星写真も見ることができるようになったと知ったので、自分の生まれ故郷をGoogleMapsで見てみました。
こうやってみるとちょっと感動。左下の隕石が落ちた跡みたいなのはなんだろ??
こうやってみるとちょっと感動。左下の隕石が落ちた跡みたいなのはなんだろ??
2005年6月24日金曜日
2005年6月22日水曜日
台北にいってきました
日曜から台北にいってました。
夜市でたらふくB級グルメを堪能してきました。目当てのものは一通り食べられたし、おなかも壊さなかったし、いい旅でした。
しばらくは台北で撮影した映像や動画をアップしていこうかなーと思います。
夜市でたらふくB級グルメを堪能してきました。目当てのものは一通り食べられたし、おなかも壊さなかったし、いい旅でした。
しばらくは台北で撮影した映像や動画をアップしていこうかなーと思います。
2005年6月15日水曜日
Dreamweaver 拡張機能 for Movable Type 3
Six Apart Japan: マクロメディアとシックス・アパート、Dreamweaver拡張機能 for Movable Type 3を発表
MTのテンプレートカスタマイズが効率的に!タグリファレンスは便利そう。
MTのテンプレートカスタマイズが効率的に!タグリファレンスは便利そう。
2005年6月10日金曜日
IE6にタブ機能がついた
Internet Explorer 6もついにタブブラウザに - CNET Japanの記事によると、MSNツールバーをインストールすることでIE6にタブ機能が追加できるようになったそうです。
IE7でタブがつくという約束でしたがFirefoxなどの追い上げに待ちきれず6につけちゃったという感じでしょうか。個人的にはIEでアプリの動作確認をするとウィンドウがいっぱいになってしまってうざーな状態になることがよくあったので、前倒しのリリースはうれしいです。
MSNツールバーはここからインストールできます。
MSN Toolbar(英語)
タブに対応しているのは英語版のMSNツールバーで日本語版はまだ対応してません。最初日本語版をインストールして、タブつかないじゃんとおろおろしてたのは秘密です。。
IE7でタブがつくという約束でしたがFirefoxなどの追い上げに待ちきれず6につけちゃったという感じでしょうか。個人的にはIEでアプリの動作確認をするとウィンドウがいっぱいになってしまってうざーな状態になることがよくあったので、前倒しのリリースはうれしいです。
MSNツールバーはここからインストールできます。
MSN Toolbar(英語)
タブに対応しているのは英語版のMSNツールバーで日本語版はまだ対応してません。最初日本語版をインストールして、タブつかないじゃんとおろおろしてたのは秘密です。。
2005年6月9日木曜日
SledgeによるWebアプリケーションフレームワーク入門
[ThinkIT] 第1回:Webアプリケーションフレームワークとは (1/4)
SledgeによるWebアプリケーションフレームワーク入門という連載がThinkITでスタートしたようです。
Sledgeは使いこなせればすごく便利なフレームワークだと思いますが、ドキュメントが少ないので、さぁフレームワークを導入しようとなったときにちょっと手を出しにくいなのかなぁって気がします。
なので、こういうわかりやすい記事が出てくるのはいいですねー。
僕の会社でもフレームワークを導入して結構たちますが、最近思うのはフレームワークだけ導入しても、その本来の目的である「工数の削減」「品質の均一化」「メンテナンス性の向上」を達成するのは難しいということです。フレームワークを利用してもその上でどういうコードを書くのかという規則、つまりその会社のコーディング規約のようなものがきちんとできていないと、結局品質のばらつきはでますし、メンテナンスも容易でなくなるんですよね。
かといってコーディング規約を文章でまとめておいても、それをすべて頭にたたき込むってのは結構しんどい作業だと思うし、結局誰も規約に目を通してなくて、うまくいかないなんてことになりがちです。
そこで登場するのがペアプログラミング。少し前に、はてなの伊藤さんとお話したときに、はてなでは新しく入社したらまずペアプログラミングをして、はてなフレームワークの使い方と、はてな的な実装方法を教え込むのだといっておられました。コーディング規約を頭で覚えるのでなくて、ペアプログラミングによって体で覚える。ペアプログラミングなんてやっている余裕はないなんて思いがちですが長い目で見ると、工数削減、品質、メンテナンス性向上するためには、遠回りのようでこれが一番いい方法なのかもしれませんね。
SledgeによるWebアプリケーションフレームワーク入門という連載がThinkITでスタートしたようです。
Sledgeは使いこなせればすごく便利なフレームワークだと思いますが、ドキュメントが少ないので、さぁフレームワークを導入しようとなったときにちょっと手を出しにくいなのかなぁって気がします。
なので、こういうわかりやすい記事が出てくるのはいいですねー。
僕の会社でもフレームワークを導入して結構たちますが、最近思うのはフレームワークだけ導入しても、その本来の目的である「工数の削減」「品質の均一化」「メンテナンス性の向上」を達成するのは難しいということです。フレームワークを利用してもその上でどういうコードを書くのかという規則、つまりその会社のコーディング規約のようなものがきちんとできていないと、結局品質のばらつきはでますし、メンテナンスも容易でなくなるんですよね。
かといってコーディング規約を文章でまとめておいても、それをすべて頭にたたき込むってのは結構しんどい作業だと思うし、結局誰も規約に目を通してなくて、うまくいかないなんてことになりがちです。
そこで登場するのがペアプログラミング。少し前に、はてなの伊藤さんとお話したときに、はてなでは新しく入社したらまずペアプログラミングをして、はてなフレームワークの使い方と、はてな的な実装方法を教え込むのだといっておられました。コーディング規約を頭で覚えるのでなくて、ペアプログラミングによって体で覚える。ペアプログラミングなんてやっている余裕はないなんて思いがちですが長い目で見ると、工数削減、品質、メンテナンス性向上するためには、遠回りのようでこれが一番いい方法なのかもしれませんね。
2005年6月8日水曜日
2005年6月6日月曜日
Google Sitemaps
GoogleよりGoogle Sitemapsというサービスがベータリリースされたようです。
サイトの運営者側でサイトマップをXML形式で作成しておいて、そのありかをGoogleに伝えておくとボットがそのXMLを元にクロールしてくれるといったサービスみたい。
こちらでサイトマップのXMLを生成するためのMT用のテンプレートの例が掲載されています。僕も試しにこのテンプレートを使ってサイトマップを作成してみました。
これを使うことで、サイト運営者の側からGoogleに対してインデックスしてよと言えるようになるので、サイト立ち上げてすぐにGoogleで検索に引っかかるようにしたいなんて時に使うといいのかも。
サイトの運営者側でサイトマップをXML形式で作成しておいて、そのありかをGoogleに伝えておくとボットがそのXMLを元にクロールしてくれるといったサービスみたい。
こちらでサイトマップのXMLを生成するためのMT用のテンプレートの例が掲載されています。僕も試しにこのテンプレートを使ってサイトマップを作成してみました。
これを使うことで、サイト運営者の側からGoogleに対してインデックスしてよと言えるようになるので、サイト立ち上げてすぐにGoogleで検索に引っかかるようにしたいなんて時に使うといいのかも。
2005年6月3日金曜日
2005年5月31日火曜日
2005年5月30日月曜日
SEPY ActionScript Editor - オープンソースなActionScriptエディタ
SEPY ActionScript Editor: Epic->yoshimax
もうひとつyoshimaxさんのより。
オープンソースなActionScriptエディタSEPY ActionScript Editor というのがyoshimaxさんの周りではやっているらしい。
もうひとつyoshimaxさんのより。
オープンソースなActionScriptエディタSEPY ActionScript Editor というのがyoshimaxさんの周りではやっているらしい。
Live Journalのバックエンド
qootas.org/blogさんのBlog Hackers Conference 2005のエントリで取り上げられていたInside LiveJournal's Backend
という資料が興味深いです。
前のエントリで書いた画像とか動画のような大きなファイルを扱うにはどうしたらいいかという疑問にたいする解答もこの中からつかめるかも。
perlベースのリバースプロキシロードバランサー兼WebサーバPerlbalは負荷分散に使えるだけでなく、mod_perlと組み合わせてファイル閲覧の認証とかもできるようなので、もう少し詳しく調べてみようかと思います。
という資料が興味深いです。
前のエントリで書いた画像とか動画のような大きなファイルを扱うにはどうしたらいいかという疑問にたいする解答もこの中からつかめるかも。
perlベースのリバースプロキシロードバランサー兼WebサーバPerlbalは負荷分散に使えるだけでなく、mod_perlと組み合わせてファイル閲覧の認証とかもできるようなので、もう少し詳しく調べてみようかと思います。
2005年5月29日日曜日
Blog Hackers Conference 2005
Blog Hackers Conference 2005に行ってきました。
先端で活躍している人の話はやっぱりおもしろいし、刺激になります。
今回の話で僕が気になったことをまとめてみます。
*Blogのプラットフォーム化
naoyaさん曰く、ブログは終焉に向かっているのではなく、プラットフォーム化してきたのだということ。ブログの終焉の終焉。ブログがプラットフォーム化してきたことはブログありきのサービスがたくさん出てきていることからもわかります。ブログがプラットフォーム化して、ブログを中心としたサービスがAPIを使って結びついていく。Webはおもしろいですねー。
*RastやSennaといった組込型検索エンジン
yappoさんのプレゼンで出てきた組込型検索エンジンの話。namazuのような独立したアプリケーションではなく、他のアプリに組み込むこと前提に作られています。MySQLによる日本語フルテキストサーチやあいまい検索できるものもあるそうです。あいまい検索を実装中で、PerlAPIもあって、利用が簡単そうなsennaを試してみようかなー。
*memcached
某ブログサービスで使われている。メモリ上にデータやオブジェクトをキャッシュしパフォーマンスを向上させることができる。レプリケーションもできる。PerlAPIも公開されているのでPerlで利用するのが簡単。
これとは別の話で、某商用DBMSよりMySQLの方がパフォーマンスいいとか、興味深い話が聞けました。個人的にはこういう大きなサービスをやるとき画像とか大きなサイズのファイルをどうやって扱っているのかが知りたいです。DBにぶちこむとするとすぐテーブルがでかくなって破綻しちゃうだろうし、ファイルに書き出しておくとすると、拡張性に乏しいし。。画像保存用サーバを用意してそこにためていくのかなー。
*タギング、Folksonomy
Flickrやdel.isio.us、はてなブックマークなんかに使われている。タギング、Folksonomyは個人的に興味がある概念。
*隣にJcodeのDanさん
少し遅れて入ってきたDanさんが僕の隣の席に。いやー、びっくりしました。
さらに前の席には小山さん。
先端で活躍している人の話はやっぱりおもしろいし、刺激になります。
今回の話で僕が気になったことをまとめてみます。
*Blogのプラットフォーム化
naoyaさん曰く、ブログは終焉に向かっているのではなく、プラットフォーム化してきたのだということ。ブログの終焉の終焉。ブログがプラットフォーム化してきたことはブログありきのサービスがたくさん出てきていることからもわかります。ブログがプラットフォーム化して、ブログを中心としたサービスがAPIを使って結びついていく。Webはおもしろいですねー。
*RastやSennaといった組込型検索エンジン
yappoさんのプレゼンで出てきた組込型検索エンジンの話。namazuのような独立したアプリケーションではなく、他のアプリに組み込むこと前提に作られています。MySQLによる日本語フルテキストサーチやあいまい検索できるものもあるそうです。あいまい検索を実装中で、PerlAPIもあって、利用が簡単そうなsennaを試してみようかなー。
*memcached
某ブログサービスで使われている。メモリ上にデータやオブジェクトをキャッシュしパフォーマンスを向上させることができる。レプリケーションもできる。PerlAPIも公開されているのでPerlで利用するのが簡単。
これとは別の話で、某商用DBMSよりMySQLの方がパフォーマンスいいとか、興味深い話が聞けました。個人的にはこういう大きなサービスをやるとき画像とか大きなサイズのファイルをどうやって扱っているのかが知りたいです。DBにぶちこむとするとすぐテーブルがでかくなって破綻しちゃうだろうし、ファイルに書き出しておくとすると、拡張性に乏しいし。。画像保存用サーバを用意してそこにためていくのかなー。
*タギング、Folksonomy
Flickrやdel.isio.us、はてなブックマークなんかに使われている。タギング、Folksonomyは個人的に興味がある概念。
*隣にJcodeのDanさん
少し遅れて入ってきたDanさんが僕の隣の席に。いやー、びっくりしました。
さらに前の席には小山さん。
2005年5月27日金曜日
FINAL FANTASY VII ADVENT CHILDRENの予告ムービー
アップル - QuickTime - FINAL FANTASY VII
アップルのサイトで「FINAL FANTASY VII」の続編「FINAL FANTASY VII ADVENT CHILDREN」の予告ムービーが公開されてました。ちょっとほしいかも。
アップルのサイトで「FINAL FANTASY VII」の続編「FINAL FANTASY VII ADVENT CHILDREN」の予告ムービーが公開されてました。ちょっとほしいかも。
Seleniumすごい
Selenium: blog.bulknews.netより
Javascriptを利用したWebアプリケーションのテストツールSeleniumというのが熱いらしいので、ちょっと試してみました。
これちょっとすごいですね。
一番驚いたのが、テストケースの作成が簡単にできること。HTMLのテーブル内にテストの手順を書いていけばそれがそのまま実行可能なテストケースになってしまいます。
このHTML見た目はちょっとしたテスト仕様書なので、そのまま成果物として出すことも可能かもしれません。ただ、内容が英語になるので、ちょっと読みにくくはありますが。。
テストケースを日本語で書けたらほんとそのままテスト仕様書になるなぁと思ってみました。
Javascriptを利用したWebアプリケーションのテストツールSeleniumというのが熱いらしいので、ちょっと試してみました。
これちょっとすごいですね。
一番驚いたのが、テストケースの作成が簡単にできること。HTMLのテーブル内にテストの手順を書いていけばそれがそのまま実行可能なテストケースになってしまいます。
このHTML見た目はちょっとしたテスト仕様書なので、そのまま成果物として出すことも可能かもしれません。ただ、内容が英語になるので、ちょっと読みにくくはありますが。。
テストケースを日本語で書けたらほんとそのままテスト仕様書になるなぁと思ってみました。
2005年5月24日火曜日
56wz(ゴロワーズ)で語呂合わせのパスワード生成
パスワードを考えるのがめんどくさいのでなんかいいツールないかなと探していたら、窓の杜 - 56wz(ゴロワーズ)なるものを見つけました。
入力した文字列を語呂合わせで変換してくれます。「ホリウチ」を変換したら「hruc」に。これだと短すぎますが、「サヤカセイコトダンゼツ」だと、「3yks1ktdnzt」となり、長い割に覚えやすいパスワードに。
入力した文字列を語呂合わせで変換してくれます。「ホリウチ」を変換したら「hruc」に。これだと短すぎますが、「サヤカセイコトダンゼツ」だと、「3yks1ktdnzt」となり、長い割に覚えやすいパスワードに。
Prototype.jsのEffectサンプル
オブジェクト指向JavaScriptライブラリPrototypeを試すために作ったページがそのままサンプルになりそうだったので、公開してみます。
Prototype.js - Effectサンプル
イベントを定義するだけでここまでのことが出来るのにちょっと感動しました。
Prototypeいい感じです。
ちょっと気になった点
-Effect.Fade()とEffect.AppearはFirefoxでみるといい感じだけどIEだとしょぼい
-Effect.Scaleは動きがもっさりしているような。。
-sleipnirでEffect.Puff()中にブラウザごと落ちることがしばしば。
Prototype.js - Effectサンプル
イベントを定義するだけでここまでのことが出来るのにちょっと感動しました。
Prototypeいい感じです。
ちょっと気になった点
-Effect.Fade()とEffect.AppearはFirefoxでみるといい感じだけどIEだとしょぼい
-Effect.Scaleは動きがもっさりしているような。。
-sleipnirでEffect.Puff()中にブラウザごと落ちることがしばしば。
2005年5月17日火曜日
Jcode 2.0 リリース
Jcode-2.00がリリースされました!
Jcode2.0の変更点はこんな感じです。
-Perl 5.8.1 以降の場合は Encode の Wrapper として機能する。
-Encode の Wrapper として機能する場合、パスの通ったところに置くだけで利用できる。
-日本語podが付いた
JcodeのホームページではEncodeを使うことを推奨していますが、mime_encodeでMIME-B-encoded ISO-2022-JPを返してくれたり、jlengthとかjfoldとか便利なメソッドもあるので、これからもJcodeのお世話になりそうです。
Jcode2.0の変更点はこんな感じです。
-Perl 5.8.1 以降の場合は Encode の Wrapper として機能する。
-Encode の Wrapper として機能する場合、パスの通ったところに置くだけで利用できる。
-日本語podが付いた
JcodeのホームページではEncodeを使うことを推奨していますが、mime_encodeでMIME-B-encoded ISO-2022-JPを返してくれたり、jlengthとかjfoldとか便利なメソッドもあるので、これからもJcodeのお世話になりそうです。
RSSを動的に生成してみた
運営をお手伝いしている鳥海先生のブログ「伯萃庵」の今日の運勢にRSSを配信する機能を追加してみました。サイトの右上に設置されている今日の運勢から取得できる結果ページにRSSがついてます。http://www.toriumihakusui.com/app/daily/rss2?p=197807122 のように生年月日をパラメータとして受け取り、動的にRSSをはき出すタイプで、その日の運勢とラッキーブック、ラッキーDVDなんかを配信しています。リンク先はamazonだったりして、若干アサマシぃことしてます(汗
ところで、今まで、MTのテンプレートを編集してAtomフィードをはき出すよう改造したりとかはやったことありましたが、自分で一からフィードを作ったのはこれが、初めてだったりします。RSSなんて、テンプレート用意してパラメータ埋め込めばOKでしょなんて簡単に考えてましたが、実際に作ってみると、XMLの中に何をセットすればいいかを悩んでしまうような要素があったり、Last-Modifiedヘッダーを吐くのを忘れていて、アグリゲータにデータを持っていってもらえなかったりと意外と手こずりました。
やっぱり、実際手を動かしてみるのが一番勉強になりますね。
ところで、今まで、MTのテンプレートを編集してAtomフィードをはき出すよう改造したりとかはやったことありましたが、自分で一からフィードを作ったのはこれが、初めてだったりします。RSSなんて、テンプレート用意してパラメータ埋め込めばOKでしょなんて簡単に考えてましたが、実際に作ってみると、XMLの中に何をセットすればいいかを悩んでしまうような要素があったり、Last-Modifiedヘッダーを吐くのを忘れていて、アグリゲータにデータを持っていってもらえなかったりと意外と手こずりました。
やっぱり、実際手を動かしてみるのが一番勉強になりますね。
2005年5月12日木曜日
Internet Week 2004 チュートリアル
Internet Week 2004でInternet Week 2004 チュートリアルの内容が公開されています。
Web and Internet Applications Day にだけは参加しましたが、それ以外は時間が無くて見ることが出来なかったので、公開されてちょっとうれしいです。
でも一緒に公開されているビデオの形式がリアルプレイヤー形式。。ちょっとしょんぼり。
Web and Internet Applications Day にだけは参加しましたが、それ以外は時間が無くて見ることが出来なかったので、公開されてちょっとうれしいです。
でも一緒に公開されているビデオの形式がリアルプレイヤー形式。。ちょっとしょんぼり。
2005年5月9日月曜日
トリックがドラマと映画で復活
Yahoo!ニュース - スポーツ報知 - 「トリック」ドラマスペシャル版&映画復活 仲間由紀恵&阿部寛主演の人気ドラマより
なんとトリックが復活するそうです。ドラマは一回限りのスペシャルだそうですが、楽しみ!
追記: 2005/05/11
公式サイトもオープンしたようです。
なんとトリックが復活するそうです。ドラマは一回限りのスペシャルだそうですが、楽しみ!
追記: 2005/05/11
公式サイトもオープンしたようです。
Sledge::Plugin::Prototype - HTML::Prototype wrapper
最近Catalystをいじりはじめました。僕はWebアプリケーションを作るときはもっぱらSledgeを使っていますが、なにやらCatalystが熱いようなのでSledgeとの比較も含めて試してます。
まず試しにAjaxっぽいアプリを作って見たんですが、そこで使ったCatalyst::Plugin::PrototypeがJavascriptを一行も書かないでAjax出来て素敵だったのでこれをSledgeでも使えるようなプラグインを書いてみました。
Sledge::Plugin::Prototype - HTML::Prototype wrapper
ちなみにPrototypeは何かの原型というわけではなくて、prototypeという名前のオブジェクト指向Javascriptライブラリなんだそうです。
まず試しにAjaxっぽいアプリを作って見たんですが、そこで使ったCatalyst::Plugin::PrototypeがJavascriptを一行も書かないでAjax出来て素敵だったのでこれをSledgeでも使えるようなプラグインを書いてみました。
Sledge::Plugin::Prototype - HTML::Prototype wrapper
ちなみにPrototypeは何かの原型というわけではなくて、prototypeという名前のオブジェクト指向Javascriptライブラリなんだそうです。
2005年5月7日土曜日
colinux + Gentooを試してみたけどDebianの方がいいや
オープンソースなWindows 2000/XP上で走るLinuxとして、にわかに話題のcolinuxを試してみました。colinux上で動かせるOSはDebian、Gentoo、FedoraCore1から選べますが、FreeBSDのportsのようなパッケージ管理システムportageが使えるということで、まずはGentoo Linuxを選んでみました。
今回インストールしたのは以下の通り。
-coLinux 0.6.2
-Gentoo-colinux-stage3-x86-2004.3
0.6.2からはlinuxのカーネルが2.4から2.6にあがっていて、各OSのイメージは2.4用と2.6用がそれぞれ、用意されています。(最初2.4用のイメージを間違えて落としてきてしまい、うまく動かずかなり時間を無駄にしましたorz)
起動からネットワークの設定なんかはすんなりいきましたが、portageを使ってシステムを最新の状態にしたり、パッケージをインストールしたりするのにかなり時間がかかりました。(emerge -u systemで半日、emerge emacsでemacsのインストールをしたら、依存パッケージが40個もあって、またインストールに半日。。)
portageどんなもんか、かなり楽しみにしていたんですが、ちょっと一つのコマンドにいちいち時間がかかりすぎてしまい、非力なマシンではちょっと使えない感じがしました。
そういうわけで、今はDebian試してます。sargeにアップデートしてapacheとかmod_perlとかいれてますが、apt-getでさくさく入って快適です。最初からDebianにしとけばよかったかも(汗
以下Gentoo Linuxに関する設定のメモを残しておきます。
*Windows側の設定
ここを見てごにょごにょ
。ネットワークはNATにしました。
*coLinuxの設定ファイルはこんな感じ
>
起動後、root:rootでログインします。
*スワップパーティションの設定
>
*ネットワークの設定
eth0の設定
>
その後ifconfig、route、pingなどでちゃんと動いているか確認。
ところで、nanoというエディタ初めて使いましたがemacsとキーバインドが似てるのと下の方にコマンドの説明がでてるので、何とか使えました。
*ユーザ追加
>
*sshdを起動&自動起動設定
>
* portageでシステムを最新の状態にする
>
恐ろしく時間がかかります。emergeだけで1日くらいかかりました。。
今回インストールしたのは以下の通り。
-coLinux 0.6.2
-Gentoo-colinux-stage3-x86-2004.3
0.6.2からはlinuxのカーネルが2.4から2.6にあがっていて、各OSのイメージは2.4用と2.6用がそれぞれ、用意されています。(最初2.4用のイメージを間違えて落としてきてしまい、うまく動かずかなり時間を無駄にしましたorz)
起動からネットワークの設定なんかはすんなりいきましたが、portageを使ってシステムを最新の状態にしたり、パッケージをインストールしたりするのにかなり時間がかかりました。(emerge -u systemで半日、emerge emacsでemacsのインストールをしたら、依存パッケージが40個もあって、またインストールに半日。。)
portageどんなもんか、かなり楽しみにしていたんですが、ちょっと一つのコマンドにいちいち時間がかかりすぎてしまい、非力なマシンではちょっと使えない感じがしました。
そういうわけで、今はDebian試してます。sargeにアップデートしてapacheとかmod_perlとかいれてますが、apt-getでさくさく入って快適です。最初からDebianにしとけばよかったかも(汗
以下Gentoo Linuxに関する設定のメモを残しておきます。
*Windows側の設定
ここを見てごにょごにょ
。ネットワークはNATにしました。
*coLinuxの設定ファイルはこんな感じ
>
<
<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<block_device index="0"
path="\DosDevices\D:\colinux\images\Gentoo-colinux-stage3-x86-2004.3.img"
enabled="true" />
<block_device index="1" path="\DosDevices\D:\colinux\images\swap.img"
enabled="true" />
<bootparams>root=/dev/cobd0</bootparams>
<initrd path="initrd.gz" />
<image path="vmlinux" />
<memory size="128" />
<network index="0" type="tap" />
</colinux>
起動後、root:rootでログインします。
*スワップパーティションの設定
>
<
#mkswap /dev/cobd/1
#nano -w /etc/fstab
#cat /etc/fstab
/dev/cobd/1 none swap sw 0 0
#swapon -a
*ネットワークの設定
eth0の設定
>
<
# nano -w /etc/conf.d/net
iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
gateway="eth0/192.168.0.1"
# nano -w /etc/resolv.conf
nameserver xxx.xxx.xxx.xxx
# /etc/init.d/net.eth0 restart
その後ifconfig、route、pingなどでちゃんと動いているか確認。
ところで、nanoというエディタ初めて使いましたがemacsとキーバインドが似てるのと下の方にコマンドの説明がでてるので、何とか使えました。
*ユーザ追加
>
<
#useradd horiuchi -m -G users,wheel,audio -s /bin/bash
#passwd horiuchi
*sshdを起動&自動起動設定
>
<
# /etc/init.d/sshd start
# rc-update add sshd default
* portageでシステムを最新の状態にする
>
<
# emerge sync
# env-update && source /etc/profile
# emerge -n '>=sys-apps/portage-2.0.51'
# cd /etc
# rm make.profile
# ln -s /usr/portage/profile/default-linux/x86/2005.0 make.profile
# emerge -u system
# emerge -u world
恐ろしく時間がかかります。emergeだけで1日くらいかかりました。。
2005年5月1日日曜日
恐竜博2005に行くなら夕方がお勧め
恐竜博2005に行ってきました。ゴールデンウィーク中ということで相当混雑するだろうなーと思っていましたが、やはり恐ろしく混んでました。時刻は13:30。博物館のチケットを買うのに10分待ちで、館内に入るまで45分待ちという状況。とりあえず10分並んでチケットは買いましたが、45分並ぶのは嫌だし、夕方になればもう少し空くかもしれないと、近くで同時開催しているベルリンの至宝展に行ってみることにしました。
こちらはそれほど混んでなくてすんなり入場できました。このベルリンの至宝展ですが、エジプト美術や古代西アジア美術、ヨーロッパ古典絵画、ヨーロッパ近代美術などいろいろな時代の芸術品を一度に見ることができるので、芸術がほとんどわからない僕でも、飽きずに楽しめました。
至宝展を一通り見た後、近くの喫茶店で休憩し、そろそろ空くかなーという頃に再度恐竜博に向かいました。時刻は16:00。さすがに少しは待つだろうなーと思いつつ会場に向かったんですが、到着してみるとさっきまであんなに並んでいた人が一人もいません。なんと全く待たずに入場できてしまいました。博物館の中もそれほど混んでなくて、一つ一つじっくり見ることができました。これから恐竜展に行こうかなーと思っている人、夕方以降に行くのがお勧めです。
2005年4月26日火曜日
郵便番号変換でXMLRPCサーバのベンチ
XML-RPCを使って、郵便番号から住所引っ張ってくるサービスを作る際に、perlとPHPどちらの方がパフォーマンスがでるのか気になったので、ちょっと実験してみました。
perlの方はnaoyaさんのApache::XMLRPC::Lite を使った mod_perl ハンドラによる XML-RPC サーバのエントリを参考にApache::XMLRPC::LiteとClass::DBIを使って実装し、PHPの方はXMLRPCの実装にXML-RPC for PHPにあるライブラリを使い、DBとの連携は組み込みのmysql_connectとかを使って実装してみました。ちなみにPHPはまともに動くコードを初めて書きましたが、意外と書けるものですねw
ベンチマークにはabを使い、同時接続数が1,5,10,20の場合をそれぞれ測定してみました。
>
以下結果です。
-Apache::XMLRPC::Lite
-Apache::XMLRPC::Lite(レスポンスを強制的にbase64にした場合)
-PHP
-CGI ( perl )
レスポンスを強制的にbase64にした場合を測定したのはSOAP::Liteのドキュメントにそうするとパフォーマンスをあがるというようなことが書かれていたので試してみました。
ですが、結果としてはそれほどパフォーマンスはあがってません。逆に同時アクセス数を大きくするとパフォーマンスが落ちてしまいました。
また、PerlとPHPではそれほどパフォーマンスに違いがないようです。
PHPだと劇的に早いという結果になったらPHPにしようかとも思ったのですが、結局どちらにしても違いはそれほどなさそうなので、得意のPerlで行くことにしました。
perlの方はnaoyaさんのApache::XMLRPC::Lite を使った mod_perl ハンドラによる XML-RPC サーバのエントリを参考にApache::XMLRPC::LiteとClass::DBIを使って実装し、PHPの方はXMLRPCの実装にXML-RPC for PHPにあるライブラリを使い、DBとの連携は組み込みのmysql_connectとかを使って実装してみました。ちなみにPHPはまともに動くコードを初めて書きましたが、意外と書けるものですねw
ベンチマークにはabを使い、同時接続数が1,5,10,20の場合をそれぞれ測定してみました。
>
<
ab -n 100 -c 1 -T text/xml -p post.txt -w http://horiuchi.vcube.net/zipconv/xmlrpc > result.html
以下結果です。
-Apache::XMLRPC::Lite
-Apache::XMLRPC::Lite(レスポンスを強制的にbase64にした場合)
-PHP
-CGI ( perl )
レスポンスを強制的にbase64にした場合を測定したのはSOAP::Liteのドキュメントにそうするとパフォーマンスをあがるというようなことが書かれていたので試してみました。
ですが、結果としてはそれほどパフォーマンスはあがってません。逆に同時アクセス数を大きくするとパフォーマンスが落ちてしまいました。
また、PerlとPHPではそれほどパフォーマンスに違いがないようです。
PHPだと劇的に早いという結果になったらPHPにしようかとも思ったのですが、結局どちらにしても違いはそれほどなさそうなので、得意のPerlで行くことにしました。
2005年4月20日水曜日
702MOと702sMOひどいな
久しぶりに携帯の個体情報を利用するシステムを作るため、ボーダフォンのサイトを調べていて唖然。
3G携帯はユーザエージェントがえらいことになっているとは聞いていましたが、702MOと702sMOは特にひどいですね。。
ユーザーエージェントがMOT-で始まるのも相当ひどいけど、ボーダフォンをみると個体情報も送らないっぽい。。
そりゃあ、HTTP::MobileAgent::Vodafoneにこんなコメントもつきますよね。
>
3G携帯はユーザエージェントがえらいことになっているとは聞いていましたが、702MOと702sMOは特にひどいですね。。
ユーザーエージェントがMOT-で始まるのも相当ひどいけど、ボーダフォンをみると個体情報も送らないっぽい。。
そりゃあ、HTTP::MobileAgent::Vodafoneにこんなコメントもつきますよね。
>
<
#for 3gc orz
2005年4月19日火曜日
2005年4月13日水曜日
VMware v5.0リリース
窓の杜 - 【NEWS】複数の“スナップショット”が保存可能になった「VMware」v5.0 正式版が公開
より
VMwareのv5.0がリリースされたようです。スナップショットを複数保存できるようになったほか、仮想マシンの画面をAVI形式で録画する機能なんかもついたみたいです。
より
VMwareのv5.0がリリースされたようです。スナップショットを複数保存できるようになったほか、仮想マシンの画面をAVI形式で録画する機能なんかもついたみたいです。
2005年4月10日日曜日
Amazon Keyword Search クエリの文字コードを指定可能に
サイトの頭についているAmazon Keyword Searchですが、日本語を入力して検索すると文字化けて正しく検索できなかったのを修正しました。
そもそもAmazon Keyword Searchは文字コードについては何にも処理しておらず、飛んでくるクエリはEUCであるという前提で作っていたので、このブログのように文字コードがUTF8だと文字化けるんですよね。なのでcというパラメータでクエリの文字コードを指定できるようにし、対応しました。
そもそもAmazon Keyword Searchは文字コードについては何にも処理しておらず、飛んでくるクエリはEUCであるという前提で作っていたので、このブログのように文字コードがUTF8だと文字化けるんですよね。なのでcというパラメータでクエリの文字コードを指定できるようにし、対応しました。
2005年4月6日水曜日
2005年4月4日月曜日
Template::Plugin::TagRescue0.04が特定条件で文字化け
あるサーバに移すとTempalte::Plugin::TagRescueを使ってタグをエスケープした部分の文字が化けるという現象が発生したため、原因を調査してみました。
サーバにインストールされていたのはその時点で最新のTemplate::Plugin::TagRescue0.04。
ソースをのぞくとタグのエスケープにApache::Util::escape_htmlもしくは、HTML::Entities::encode_entitiesが利用されていて、Apache::Utilが利用できない環境ではHTML::Entitiesが使われるという設計になっていました。
問題のサーバを調べてみるとApache::Utilが利用できない環境で、エスケープにはHTML::Entitiesが使われていて、どうやらそのHTML::Entitiesでエスケープを行うと文字化けが発生するようです。
そこでHTML::Entitiesのドキュメントを眺めると、以下のような記述が。
>
encode_entitiesの2つめの引数に明示的にエスケープを行う文字を指定しないと、マルチバイト文字もエンコードの対象になるようで、これが原因で文字化けしていたようです。試しに第2引数をわたしてやると、文字化けが解消されました。
今回の件は作者のtanimotoさんに報告し、パッチを送ったのですが、送った数時間後には修正しCPANにアップしてくださいました。仕事がはやい!
しかも僕のパッチからさらに改良して、実行速度を向上させるあたり、さすがだなーと思いました。
サーバにインストールされていたのはその時点で最新のTemplate::Plugin::TagRescue0.04。
ソースをのぞくとタグのエスケープにApache::Util::escape_htmlもしくは、HTML::Entities::encode_entitiesが利用されていて、Apache::Utilが利用できない環境ではHTML::Entitiesが使われるという設計になっていました。
問題のサーバを調べてみるとApache::Utilが利用できない環境で、エスケープにはHTML::Entitiesが使われていて、どうやらそのHTML::Entitiesでエスケープを行うと文字化けが発生するようです。
そこでHTML::Entitiesのドキュメントを眺めると、以下のような記述が。
>
encode_entities( $string, $unsafe_chars )<
This routine replaces unsafe characters in $string with their entity representation. A second argument can be given to specify which characters to consider unsafe (i.e., which to escape). The default set of characters to encode are control chars, high-bit chars, and the <, &, >, and " characters. But this, for example, would encode just the <, &, >, and " characters:
encode_entitiesの2つめの引数に明示的にエスケープを行う文字を指定しないと、マルチバイト文字もエンコードの対象になるようで、これが原因で文字化けしていたようです。試しに第2引数をわたしてやると、文字化けが解消されました。
今回の件は作者のtanimotoさんに報告し、パッチを送ったのですが、送った数時間後には修正しCPANにアップしてくださいました。仕事がはやい!
しかも僕のパッチからさらに改良して、実行速度を向上させるあたり、さすがだなーと思いました。
2005年3月31日木曜日
Sledge + MySQL4.1でセッションを保存できない
Sledge+MySQL4.1な環境でセッションを保存できないという状況に陥りました。
現象としては、セッションIDは保存されているのに、セッションデータ(a_session)だけが保存されないという状況です。どうやらTEXT型のフィールドにStorableモジュールでnfreezeしたデータを入れることができないみたいなので、原因を調べてみました。。
MySQL リファレンスマニュアル :: 2.5.1 バージョン 4.0 から 4.1 へのアップグレードによると、
>
ということで、4.1からはTEXT型がキャラクタセットを持つようになったようです。試しにshow create talbe sessionsを実行すると以下のように、CHARSET=ujisがついていました。
>
このことから、ujis(EUC)のキャラクタセットをもつTEXTフィールドにnfreezeしたujis以外の文字コードを含んだデータをインサートしようとしたため、データが空になってしまうのではと予想しました。
そこでSledge::Session::Pgにならって、nfreezeしたものをbase64エンコードして、ujisの文字コード内で表現できるデータにしてからインサートするようにしたところ、うまくデータを保存できるようになりました。実際には以下のようなSledge::Session::MySQLのサブクラスを作って、替わりにcreate_sessionにセットしてあげました。
>
現象としては、セッションIDは保存されているのに、セッションデータ(a_session)だけが保存されないという状況です。どうやらTEXT型のフィールドにStorableモジュールでnfreezeしたデータを入れることができないみたいなので、原因を調べてみました。。
MySQL リファレンスマニュアル :: 2.5.1 バージョン 4.0 から 4.1 へのアップグレードによると、
>
すべてのテーブルと文字列カラムがキャラクタセットを持つようになった。 See 章 9. 各国キャラクタセットと Unicode。 キャラクタセット情報は、SHOW CREATE TABLE と mysqldump によって表示される (MySQL バージョン 4.0.6 以降は、新しいダンプファイルを読み取ることはできる。これより前のバージョンは、新しいダンプファイルを読み取ることはできない)。<
ということで、4.1からはTEXT型がキャラクタセットを持つようになったようです。試しにshow create talbe sessionsを実行すると以下のように、CHARSET=ujisがついていました。
>
<
CREATE TABLE `sessions` (
`id` varchar(32) NOT NULL default '',
`a_session` mediumtext,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis
このことから、ujis(EUC)のキャラクタセットをもつTEXTフィールドにnfreezeしたujis以外の文字コードを含んだデータをインサートしようとしたため、データが空になってしまうのではと予想しました。
そこでSledge::Session::Pgにならって、nfreezeしたものをbase64エンコードして、ujisの文字コード内で表現できるデータにしてからインサートするようにしたところ、うまくデータを保存できるようになりました。実際には以下のようなSledge::Session::MySQLのサブクラスを作って、替わりにcreate_sessionにセットしてあげました。
>
<
package Sledge::Session::MySQL41;
use strict;
use base qw(Sledge::Session::MySQL);
use MIME::Base64;
sub _serialize {
my($self, $data) = @_;
return encode_base64(Storable::freeze($data));
}
sub _deserialize {
my($self, $data) = @_;
return Storable::thaw(decode_base64($data));
}
1;
Magic number checking on storable string failed
あるバージョンのStorableでシリアライズしたデータを別のバージョンのStorableでデシリアライズしようとすると吐かれるエラー。Storableのバージョンアップを行うなどした場合に注意が必要。
2005年3月29日火曜日
オライリーHACKS本3冊発売 - BSD HACKS, XML HACKS, PDF HACKS
待ちに待ったHacksシリーズ3冊発売。早速購入しました。
BSD HACKS―プロが使うテクニック&ツール100選
posted with amazlet at 05.03.27
Dru Lavigne 林 秀幸
オライリージャパン (2005/03)
通常2~3日以内に発送
オライリージャパン (2005/03)
通常2~3日以内に発送
XML Hacks―エキスパートのためのデータ処理テクニック
posted with amazlet at 05.03.27
Michael Fitzgerald 木下 哲也 福龍興業
オライリージャパン (2005/03)
在庫切れ
オライリージャパン (2005/03)
在庫切れ
PDF Hacks―文書作成、管理、活用のための達人テクニック
posted with amazlet at 05.03.27
Sid Steward 千住 治郎
オライリージャパン (2005/03)
在庫切れ
オライリージャパン (2005/03)
在庫切れ
2005年3月28日月曜日
タージマハール蒲田店
蒲田でカレー屋と言えばここ!と評判の「タージマハール蒲田店」に行ってきました。
蒲田駅西口の東急ガード下にある飲食街を少し進むと左手にあります。
店構えはちょっと怪しくて、おいしいと知らなければちょっと入りづらい感じ。
店内はカウンターのみで、結構狭く、周りにはインドの写真や、買ってきた食材が置いてあったりと、雑然としています。
これだけみると、ほんとにここが噂のおいしい見せなのかちょっと心配になります。
が、実際にカレーを食べると、さらさらとしていて結構辛いんですが、かなりうまい!
今回、僕は「スペシャルインドカレー」を、奥さんは「ボンベイムング(子羊と豆のカレー)」を注文しましたがどちらもとてもおいしかったです。次はキーマカレーか?
>
<
蒲田駅西口の東急ガード下にある飲食街を少し進むと左手にあります。
店構えはちょっと怪しくて、おいしいと知らなければちょっと入りづらい感じ。
店内はカウンターのみで、結構狭く、周りにはインドの写真や、買ってきた食材が置いてあったりと、雑然としています。
これだけみると、ほんとにここが噂のおいしい見せなのかちょっと心配になります。
が、実際にカレーを食べると、さらさらとしていて結構辛いんですが、かなりうまい!
今回、僕は「スペシャルインドカレー」を、奥さんは「ボンベイムング(子羊と豆のカレー)」を注文しましたがどちらもとてもおいしかったです。次はキーマカレーか?
>
タージマハール 蒲田店
東京都大田区西蒲田7-70
03-3734-0913
2005年3月25日金曜日
mod_perl + encodingプラグマでサイト全体が文字化け
perl5.8から導入されたencodingプラグマを利用してSTDOUTの文字コードを透過的にエンコーディングして出力するようなスクリプトをmod_perl環境で実行すると、encodingプラグマの影響がそれを実行したapacheプロセスに残ってしまい、それ以降に実行されるすべてのスクリプトもこの影響を受けてしまうようです。
仮にEUCでサイトを構築していた場合、
>
のようなスクリプトを実行してしまうと、このスクリプトを実行したApacheの子プロセスにおいて、それ以降のすべての出力がUTF8にエンコーディングされてしまい、結果サイトが文字化けしてしまうことになります。
mod_perl環境ではencodingプラグマは使用しないで、JcodeとかEncodeモジュールを利用するほうがよさそうです。
-Jcodeを使う場合
>
-Encodeのfrom_toを使う場合
>
仮にEUCでサイトを構築していた場合、
>
<
#!/usr/bin/env perl
use strict;
use encoding 'euc-jp', STDOUT => 'utf8';
print "Content-type: text/html; charset=utf8;\n\n";
print "こんにちは";
のようなスクリプトを実行してしまうと、このスクリプトを実行したApacheの子プロセスにおいて、それ以降のすべての出力がUTF8にエンコーディングされてしまい、結果サイトが文字化けしてしまうことになります。
mod_perl環境ではencodingプラグマは使用しないで、JcodeとかEncodeモジュールを利用するほうがよさそうです。
-Jcodeを使う場合
>
<
#!/usr/bin/env perl
use strict;
use Jcode;
print "Content-type: text/html; charset=utf8;\n\n";
print Jcode->new("こんにちは", 'euc')->utf8;
-Encodeのfrom_toを使う場合
>
<
#!/usr/bin/env perl
use strict;
use Encode;
my $str = "こんにちは";
Encode::from_to( $str, 'euc-jp', 'utf8');
print "Content-type: text/html; charset=utf8;\n\n";
print $str;
2005年3月22日火曜日
mt-ban-nonja-tbping.pl - 日本語を含まないTrackbackPingをはじく
最近トラックバックスパムが頻繁に送られてくるようになりました。最初は手で消していたんですが、スパムの量が一向に減らないので、対策として、日本語を含まないTrackbackPingをはじくようなプラグインを書いて見ました。
mt-ban-nonja-tbping.pl
mt-ban-nonja-com.plと同様に、ひらがなもしくはカタカナの連続する回数と出現箇所をグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
trackback pingを受け取るとこの設定に従ってexcerptの中身をチェックし、条件をクリアできなければはじきます。
mt-ban-nonja-tbping.pl
mt-ban-nonja-com.plと同様に、ひらがなもしくはカタカナの連続する回数と出現箇所をグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
trackback pingを受け取るとこの設定に従ってexcerptの中身をチェックし、条件をクリアできなければはじきます。
mt-ban-nonja-com.pl - コメントスパム対策プラグイン
以前のエントリーでコメントスパム対策として「コメントにひらがながM回連続している部分がN箇所以上ない場合スパムとみなして、はじく」ということをやりましたが、これをMTプラグイン化してみました。
mt-ban-nonja-com.pl
前回からの変更点として、以前のエントリーではひらがなのみの連続としていたところを、ひらがなもしくはカタカナの連続としています。
上記プラグインをmtのプラグインディレクトリに放り込んでやれば動くと思います。ひらがなの連続する回数と出現箇所はプラグイン内にかかれているグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
また、$Method = "moderate"; でモデレート、"deny" で投稿を拒否します。このあたりの実装はmiyagawaさんのMTBanASCIIを参考にさせて頂きました。
mt-ban-nonja-com.pl
前回からの変更点として、以前のエントリーではひらがなのみの連続としていたところを、ひらがなもしくはカタカナの連続としています。
上記プラグインをmtのプラグインディレクトリに放り込んでやれば動くと思います。ひらがなの連続する回数と出現箇所はプラグイン内にかかれているグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
また、$Method = "moderate"; でモデレート、"deny" で投稿を拒否します。このあたりの実装はmiyagawaさんのMTBanASCIIを参考にさせて頂きました。
サイトリニューアルしました。
hori-uchi.comをリニューアルしました。
デザインをしてくれたkawachi君に感謝!!大事に使わせてもらいますね。
絵心がない僕にとって、さくっとこんなにすてきなサイトをデザインできるなんて、ほんと尊敬しちゃいます。
サイトの方ですが、まだTOPと個別アーカイブのみ新デザインを適用した状態で、他の部分はデザインぐちゃぐちゃですが、徐々に直していきます。
デザインをしてくれたkawachi君に感謝!!大事に使わせてもらいますね。
絵心がない僕にとって、さくっとこんなにすてきなサイトをデザインできるなんて、ほんと尊敬しちゃいます。
サイトの方ですが、まだTOPと個別アーカイブのみ新デザインを適用した状態で、他の部分はデザインぐちゃぐちゃですが、徐々に直していきます。
2005年3月21日月曜日
2005年3月20日日曜日
2005年3月19日土曜日
gonzui Perl対応
gonzui Perl 対応: blog.bulknews.netより
miyagawaさんがgonzuiのPerl対応をしたそうです!熱すぎます!
さらにCPANモジュールをgonzuiを使って検索できるCPAN code search by gonzuiも同時に公開。ため息が出ます。。
これでperlユーザはCPANに登録された大量のコードをいつでも簡単に参照することができるようになるわけですね。
miyagawaさんがgonzuiのPerl対応をしたそうです!熱すぎます!
さらにCPANモジュールをgonzuiを使って検索できるCPAN code search by gonzuiも同時に公開。ため息が出ます。。
これでperlユーザはCPANに登録された大量のコードをいつでも簡単に参照することができるようになるわけですね。
2005年3月16日水曜日
これだけは知っておきたい個人情報保護
これだけは知っておきたい個人情報保護
posted with amazlet at 05.03.16
岡村 久道 鈴木 正朝
日本経済新聞社 (2005/01)
売り上げランキング: 8
通常2~3日以内に発送
日本経済新聞社 (2005/01)
売り上げランキング: 8
通常2~3日以内に発送
おすすめ度の平均:
「これで十分!!」入門編としてなら可
もっとこういう本がでてほしい
薄くて一気に読めます。お手軽に個人情報保護法の概要がつかめる一冊だと思います。525円と安いですし、最初に読む本としておすすめ。
Class::Dateで扱えるのは1902年から2038年まで
search.cpan.org: Class::Date - Class for easy date and time manipulation
Class::Dateに「1900-01-01」を渡すとなぜか2038年になってしまうのでドキュメントを見直すとBUGS AND LIMITATIONSのセクションに以下の記述がありました。
>
時間関係はTime::Pieceを使った方がいいかも。
Class::Dateに「1900-01-01」を渡すとなぜか2038年になってしまうのでドキュメントを見直すとBUGS AND LIMITATIONSのセクションに以下の記述がありました。
>
This module uses the POSIX functions for date and time calculations, so it is not working for dates beyond 2038 and before 1902.<
I don't know what systems support dates in 1902-1970 range, it may not work on your system. I know it works on the Linux glibc system with perl 5.6.1 and 5.7.2. I know it does not work with perl 5.005_03 (it may be the bug of the Time::Local module). Please report if you know any system where it does _not_ work with perl 5.6.1 or later.
I hope that someone will fix this with new time_t in libc. If you really need dates over 2038 and before 1902, you need to completely rewrite this module or use Date::Calc or other date modules.
時間関係はTime::Pieceを使った方がいいかも。
2005年3月15日火曜日
2005年3月14日月曜日
はてなフォトライフデスクトップ
はてなフォトライフにアップロードされた写真をデスクトップにランダムに表示してくれるはてなフォトライフデスクトップをインストールしてみました。
表示される写真のほとんどが、動物とか風景とかきれいな写真なんですが、たまにグラビアとか表示されて、ちょっとどっきり。
表示される写真のほとんどが、動物とか風景とかきれいな写真なんですが、たまにグラビアとか表示されて、ちょっとどっきり。
2005年3月13日日曜日
蒲田のベトナム料理店 「ミレイ」 に行ってきました
都内随一のベトナム料理店と噂されるミレイに行ってきました。グーグルで検索してみると、おいしいとかやみつきになると言った内容のブログや記事をたくさん見つけられます。
-ayanolog: 草いっぱいのフォーを食べる:蒲田「ミレイ」
-B食倶楽部/おなかの具合次第
-ミレイ
場所は蒲田駅東口から線路沿いに歩いて5分くらいのところ。予約時間の18時より少し早い17時45分くらいに到着したのですが、中に入ってみるとすでにほぼ満席状態。噂通りの人気店みたいです。
今回注文した料理は、「青パパイヤのサラダ」「肉生春巻き」「バインセオ(ベトナム風お好み焼き)」「山芋のスープ」「鶏肉のフォー」、食後のデザートに「揚バナナ」と「ベトナム風しるこ」の計7品。
肉生春巻きは具がぎっしりで大ぶりなのに、しっかり巻かれていて、食べてる間にぼろぼろ崩れることもありませんでしたし、バインセオも野菜たっぷりでおいしい。デザートの揚バナナとベトナム風しるこも普段食べたことない味に満足しました。
ただ、パクチーが大の苦手な僕にはそれが大量に入った「山芋のスープ」はちょっと飲めませんでした。また、「鶏肉のフォー」と「青パパイヤのサラダ」にもすこしパクチーが入っていて、ちょっと苦戦。。
このエントリーを書いている今も何となくパクチーのにおいがするような気がします。。
パクチーや香草が苦手な人には食べられない料理も多そうですが、それが好きって人にはたまらないお店ではないかと思います。
-ayanolog: 草いっぱいのフォーを食べる:蒲田「ミレイ」
-B食倶楽部/おなかの具合次第
-ミレイ
場所は蒲田駅東口から線路沿いに歩いて5分くらいのところ。予約時間の18時より少し早い17時45分くらいに到着したのですが、中に入ってみるとすでにほぼ満席状態。噂通りの人気店みたいです。
今回注文した料理は、「青パパイヤのサラダ」「肉生春巻き」「バインセオ(ベトナム風お好み焼き)」「山芋のスープ」「鶏肉のフォー」、食後のデザートに「揚バナナ」と「ベトナム風しるこ」の計7品。
肉生春巻きは具がぎっしりで大ぶりなのに、しっかり巻かれていて、食べてる間にぼろぼろ崩れることもありませんでしたし、バインセオも野菜たっぷりでおいしい。デザートの揚バナナとベトナム風しるこも普段食べたことない味に満足しました。
ただ、パクチーが大の苦手な僕にはそれが大量に入った「山芋のスープ」はちょっと飲めませんでした。また、「鶏肉のフォー」と「青パパイヤのサラダ」にもすこしパクチーが入っていて、ちょっと苦戦。。
このエントリーを書いている今も何となくパクチーのにおいがするような気がします。。
パクチーや香草が苦手な人には食べられない料理も多そうですが、それが好きって人にはたまらないお店ではないかと思います。
2005年3月9日水曜日
WEB+DB PRESS特別総集編
WEB+DB PRESS特別総集編が3月25日に発売されるようです。内容はこんな感じ。
「Perlで始めよう」がない!!
-Looking Back: WEB+DB PRESS Vol.1~Vol.24までの表紙,目次
-巻頭記事『Web-DBシステム開発の現在/過去/未来』……羽生章洋
-スタートアップ解説『Webシステム開発をはじめよう!』……山田祥寛
--第1章:はじめてサーバサイド技術を学ぶ方のために
--- Webの基本的なしくみ
--Part1:サーバサイドプログラミングをはじめよう
--第2章:サーバサイドJavaではじめよう(その1)
--- JSP&サーブレット~はじめの一歩
--第3章:サーバサイドJavaではじめよう(その2)
--- PostgreSQL連携からStrutsアプリケーション構築まで
--第4章:ASP.NETではじめよう
--- ADO.NETを使ってMSDEへのデータアクセス
--第5章:PHPではじめよう
--- データベース接続用ライブラリPEAR::DBとテンプレートエンジンSmarty
--Part2:オープンソースデータベースを使おう
--第6章:PostgreSQLを使おう
--- 最新! PostgreSQL 8.0 Windows版をインストール
--第7章:MySQLを使おう
--- 充実のGUI管理ツールで管理の省力化
「Perlで始めよう」がない!!
-Looking Back: WEB+DB PRESS Vol.1~Vol.24までの表紙,目次
-巻頭記事『Web-DBシステム開発の現在/過去/未来』……羽生章洋
-スタートアップ解説『Webシステム開発をはじめよう!』……山田祥寛
--第1章:はじめてサーバサイド技術を学ぶ方のために
--- Webの基本的なしくみ
--Part1:サーバサイドプログラミングをはじめよう
--第2章:サーバサイドJavaではじめよう(その1)
--- JSP&サーブレット~はじめの一歩
--第3章:サーバサイドJavaではじめよう(その2)
--- PostgreSQL連携からStrutsアプリケーション構築まで
--第4章:ASP.NETではじめよう
--- ADO.NETを使ってMSDEへのデータアクセス
--第5章:PHPではじめよう
--- データベース接続用ライブラリPEAR::DBとテンプレートエンジンSmarty
--Part2:オープンソースデータベースを使おう
--第6章:PostgreSQLを使おう
--- 最新! PostgreSQL 8.0 Windows版をインストール
--第7章:MySQLを使おう
--- 充実のGUI管理ツールで管理の省力化
2005年3月8日火曜日
ThunderbirdのメールボックスもインデックスするGDS
Hello GDS, Goodbye YDS (by Jeremy Zawodny)より
最近リリースされたGDS(Google Desktop Search)はThunderbirdのメールボックスもインデックスしてくれるみたいです。メールの検索をGoogleで行えるようになるとかなり便利になりそう。
OSの再インストールをしてからGDSを入れてなかったんですが、また入れてみようと思います。
最近リリースされたGDS(Google Desktop Search)はThunderbirdのメールボックスもインデックスしてくれるみたいです。メールの検索をGoogleで行えるようになるとかなり便利になりそう。
OSの再インストールをしてからGDSを入れてなかったんですが、また入れてみようと思います。
MovableType with PostgreSQLのインストールでの注意点
MovableTypeのインストールでストレージにPostgreSQLを選択した場合、ある条件でmt-load.cgi実行時に以下のエラーがでました。
>
上記エラーが発生した条件は以下のとおりです。
-MovableType - 3.151
-PostgreSQL - 7.3.5
-サイトの文字コードはUTF-8
-DBの文字コードがSQL_ASCII
エラーを回避するにはDBの文字コードをUNICODE(サイトの文字コードがEUCの場合はEUC_JP)で作り直せばOKです。
>
作成したデータベースの文字コードは以下のコマンドで確認できます。
>
PostgreSQLのVARCHAR型はバイト数でなく文字数で指定できるのでデータベースの文字コードをUNICODEにした場合はバイト数は50バイトを超えていても文字列として50文字以内であればインサートできるようです。
>
<
Insertion test failed on SQL error ERROR: value too long for type character varying(50)
上記エラーが発生した条件は以下のとおりです。
-MovableType - 3.151
-PostgreSQL - 7.3.5
-サイトの文字コードはUTF-8
-DBの文字コードがSQL_ASCII
エラーを回避するにはDBの文字コードをUNICODE(サイトの文字コードがEUCの場合はEUC_JP)で作り直せばOKです。
>
<
createdb -E UNICODE mt_database_name
作成したデータベースの文字コードは以下のコマンドで確認できます。
>
<
psql -l
PostgreSQLのVARCHAR型はバイト数でなく文字数で指定できるのでデータベースの文字コードをUNICODEにした場合はバイト数は50バイトを超えていても文字列として50文字以内であればインサートできるようです。
2005年3月4日金曜日
RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み
RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み
posted with amazlet at 05.03.04
鈴木 幸市 藤塚 勤也
翔泳社 (2005/02/22)
売り上げランキング: 9,460
通常24時間以内に発送
翔泳社 (2005/02/22)
売り上げランキング: 9,460
通常24時間以内に発送
これもおすすめらしい。
CSSクックブック
CSSクックブック―Webデザインのための活用テクニック集
posted with amazlet at 05.03.03
Christopher Schmitt ドキュメントシステム
オライリー・ジャパン (2005/02)
売り上げランキング: 1,733
通常3日間以内に発送
オライリー・ジャパン (2005/02)
売り上げランキング: 1,733
通常3日間以内に発送
おすすめ度の平均:
やっと出た、オライリーの「CSSクックブック」。クックブックとかHackがついたオライリー本はどうしてもほしくなりますね。
この本結構評判がいいようなので購入予定。
2005年3月2日水曜日
Path::Class - Cross-platform path specification manipulation
search.cpan.org: Ken Williams / Path-Class
ファイルのPathをオブジェクトとして扱えないかなーと思って探していて見つけたモジュール。
File::Specよりシンプルにパスを扱えるてよさげ。
ファイルのPathをオブジェクトとして扱えないかなーと思って探していて見つけたモジュール。
File::Specよりシンプルにパスを扱えるてよさげ。
2005年2月28日月曜日
2005年2月24日木曜日
Windows XPにAdministratorでログオンする
さっき「Windows XPにAdministratorでログオンする方法は?」と聞かれてすぐに答えられませんでした。なんか簡単にできそうですが、普段自分のアカウントでログインしているし、そのアカウントにAdministrator相当の権限を持たせているので、いざ、Administratorでログオンするにはって聞かれると、わからないものですね。
でもちょっと調べたら方法はすぐに見つかりました。
XPに「Administrator」でログオンする / デジタルARENA
Professional Editionなら、「ようこそ画面」で、[Ctrl]+[Alt]+[Delete]を2回押すと、このログオン画面が表示されるみたい。Home Editionはセーフモードで立ち上げないとAdministratorではログイン出来ないみたいですね。
うーん、知らなかった。
でもちょっと調べたら方法はすぐに見つかりました。
XPに「Administrator」でログオンする / デジタルARENA
Professional Editionなら、「ようこそ画面」で、[Ctrl]+[Alt]+[Delete]を2回押すと、このログオン画面が表示されるみたい。Home Editionはセーフモードで立ち上げないとAdministratorではログイン出来ないみたいですね。
うーん、知らなかった。
Fire File Copy - ファイルの高速コピー、移動
A-1 DRIVE -Software / Fire File Copy
友達に教えてもらった高速にファイルをコピー、移動できるツール。コピーの際、ハードディスクでなく物理メモリを巨大なバッファとして使うことで、高速かつ、ガリガリという音を立てずにファイルをコピー、移動出来るそう。
動画とかでっかいファイルをコピーするのによさげ。なによりハードディスクがガリガリ言わないので、精神衛生上とってもいいですね。
友達に教えてもらった高速にファイルをコピー、移動できるツール。コピーの際、ハードディスクでなく物理メモリを巨大なバッファとして使うことで、高速かつ、ガリガリという音を立てずにファイルをコピー、移動出来るそう。
動画とかでっかいファイルをコピーするのによさげ。なによりハードディスクがガリガリ言わないので、精神衛生上とってもいいですね。
Class::Dateいい感じ
Class::DBIのWikiで使われてたのをみてから、時間を扱うモジュールとして、Class::Dateを利用しています。時間をオブジェクトとして扱うモジュールといえば、Time::PieceとかDate::Simpleが有名ですが、Class::Dateも結構いい感じです。Class:DBIと一緒に使うと便利で、has_aでDATETIME型のカラムにマッピングするのが以下の一行で行えます。
>
>
<
__PACKAGE__->has_a( modify_date => 'Class::Date' );
2005年2月17日木曜日
あやしい医者
何年かぶりにインフルエンザにかかってしまいました。久しぶりに39度越えの熱を体感して死ぬかと思いました。病院に行ったのも久しぶりでした。が、その病院がなんかとってもあやしかったんです。
今の場所に引っ越してきて初めての病気なので、病院がどこにあるかもわかりません。なのでYahooで調べて、一番家から近い病院に行きました。
具合の悪い体を引きずって何とかたどり着いたのですが、外から見ると廃病院。。明らかに営業していなそうな感じです。あらかじめ電話して営業していることは確認済みだったので、ドアを開けてみると看護婦らしきおばさんが受付から出てきました。初めての来院なので、いくつか質問され、それに答えると、ちょっと待つように言われました。僕以外の患者はいなく、なぜか2003年のディズニーキャラクターのカレンダー。なんか不思議な空間です。
少し待っていると、診察室の反対側からゴラム似のおじいさんがひょこひょことでてきました。そしてそのまま診察室へ。すると僕も診察室に呼ばれました。どうやらあのゴラム似のおじいさんが先生のようです。
診察室では現在の症状を一通り話しました。その後拷問椅子みたいな椅子に座らされてのどに消毒薬を塗られ、絶対音聞けてないだろってくらいの早さで聴診器をぺたぺたされ、指でこんこんされ、一通りの診察は終わったみたいです。
それで出た結果が「インフルエンザだね」。。至ってふつうです。なんか「注射うつ?」とかいってましたが、なんの注射かわからないし怖かったんで注射はやめました。とりあえず、今回は処方箋を書いてもらえただけよしとしました。
次は別の医者にいこーっと。
今の場所に引っ越してきて初めての病気なので、病院がどこにあるかもわかりません。なのでYahooで調べて、一番家から近い病院に行きました。
具合の悪い体を引きずって何とかたどり着いたのですが、外から見ると廃病院。。明らかに営業していなそうな感じです。あらかじめ電話して営業していることは確認済みだったので、ドアを開けてみると看護婦らしきおばさんが受付から出てきました。初めての来院なので、いくつか質問され、それに答えると、ちょっと待つように言われました。僕以外の患者はいなく、なぜか2003年のディズニーキャラクターのカレンダー。なんか不思議な空間です。
少し待っていると、診察室の反対側からゴラム似のおじいさんがひょこひょことでてきました。そしてそのまま診察室へ。すると僕も診察室に呼ばれました。どうやらあのゴラム似のおじいさんが先生のようです。
診察室では現在の症状を一通り話しました。その後拷問椅子みたいな椅子に座らされてのどに消毒薬を塗られ、絶対音聞けてないだろってくらいの早さで聴診器をぺたぺたされ、指でこんこんされ、一通りの診察は終わったみたいです。
それで出た結果が「インフルエンザだね」。。至ってふつうです。なんか「注射うつ?」とかいってましたが、なんの注射かわからないし怖かったんで注射はやめました。とりあえず、今回は処方箋を書いてもらえただけよしとしました。
次は別の医者にいこーっと。
2005年2月10日木曜日
Sledge::Plugin::JavaScript::DocumentWrite
Sledge::Plugin::JavaScript::DocumentWrite - output content as javascript's document.write
Outputをdocument.writeにして出力するSledgeのプラグインを書いてみました。
フィルターの部分はApache::JavaScript::DocumentWriteのコードを参考にさせてもらいました。
それとContent-typeをtext/plainにするためにオリジナルのoutput_contentにちょっとだけ手を加えたものをAFTER_DISPATCHにHookしてます。ちょっと強引かなー。
>
Outputをdocument.writeにして出力するSledgeのプラグインを書いてみました。
フィルターの部分はApache::JavaScript::DocumentWriteのコードを参考にさせてもらいました。
それとContent-typeをtext/plainにするためにオリジナルのoutput_contentにちょっとだけ手を加えたものをAFTER_DISPATCHにHookしてます。ちょっと強引かなー。
>
<
package Sledge::Plugin::JavaScript::DocumentWrite;
use strict;
use vars qw($VERSION);
$VERSION = '0.02';
sub import {
my $class = shift;
my $pkg = caller(0);
no strict 'refs';
*{"$pkg\::add_documentwrite_filter"} = \&add_documentwrite_filter;
}
sub add_documentwrite_filter {
my $self = shift;
$self->add_filter(\&documentwrite_filter);
$self->register_hook(AFTER_DISPATCH => \&output_content);
}
sub documentwrite_filter {
my ($self, $content) = @_;
return join "\n", map {
s/\x27/'/g; # '
$_ = "document.writeln('$_');";
} split /\n/, $content;
}
sub output_content {
my $self = shift;
$self->r->content_type('text/plain');
my $content = $self->make_content;
$self->set_content_length(length $content);
$self->send_http_header;
$self->r->print($content);
$self->invoke_hook('AFTER_OUTPUT');
$self->finished(1);
}
1;
2005年2月7日月曜日
2005年2月3日木曜日
FlipClip - 簡単動画クリップ作成ツール
VBC、Webカメラの撮影動画をブログに掲載できる「FlipClip」の実機デモ
サーバサイドの開発を担当している簡単動画クリップ作成ツール「FlipClip」が今開催中のNET&COM 2005に出展されています。実際のサービス開始は2月下旬の予定です。
FlipClipは専用レコーダーを使って録画出来る他、携帯で録画した動画をメールに添付して送るという方法で携帯からの投稿もできます。
FlipClipに保存した動画はこんな感じで簡単に貼り付けられます。
サーバサイドの開発を担当している簡単動画クリップ作成ツール「FlipClip」が今開催中のNET&COM 2005に出展されています。実際のサービス開始は2月下旬の予定です。
FlipClipは専用レコーダーを使って録画出来る他、携帯で録画した動画をメールに添付して送るという方法で携帯からの投稿もできます。
FlipClipに保存した動画はこんな感じで簡単に貼り付けられます。
2005年1月31日月曜日
ネットワークセキュリティHACKS―プロが使うテクニック&ツール100選
posted with amazlet at 05.01.30
Andrew Lockhart 渡辺 勝弘 鶴岡 信彦 黒川 原佳 新井 貴之 松田 綾爾 鈴木 和也
オライリー・ジャパン (2005/01)
売り上げランキング: 689
通常2~3日以内に発送
オライリー・ジャパン (2005/01)
売り上げランキング: 689
通常2~3日以内に発送
オライリーからネットワークセキュリティHACKSが発売されました。サーバのセキュリティを見直す際の参考によさそう。早速注文しました。
2005年1月28日金曜日
mixi プレミアム - mixiが有料サービス提供開始
イー・マーキュリー、ソーシャルネットワーク“mixi”に有料オプション“mixiプレミアム”を提供開始
mixiが有料サービスを始めるそうです。料金は月額315円。
今回の有料サービス実施に合わせて、日記は3月1日に100MBまでの容量制限が、メッセージは3月31日から60日間の保存期間が設定されるそうなので、mixi日記をバリバリ使っている人は注意が必要かも。
mixiが有料サービスを始めるそうです。料金は月額315円。
今回の有料サービス実施に合わせて、日記は3月1日に100MBまでの容量制限が、メッセージは3月31日から60日間の保存期間が設定されるそうなので、mixi日記をバリバリ使っている人は注意が必要かも。
Template::Toolkit - 文字列の連結
Template::Toolkitのテンプレート内の文字列の連結は'_'(アンダースコア)を使う。忘れるのでメモ。
Template Toolkit Manual
You can concatenate strings together using the ' _ ' operator. In Perl 5, the '.' is used for string concatenation, but in Perl 6, as in the Template Toolkit, the '.' will be used as the method calling operator and ' _ ' will be used for string concatenation. Note that the operator must be specified with surrounding whitespace which, as Larry says, is construed as a feature:
[% copyright = '(C) Copyright' _ year _ ' ' _ author %]
You can, of course, achieve a similar effect with double quoted string interpolation.
[% copyright = "(C) Copyright $year $author" %]
2005年1月26日水曜日
Movable Typeに脆弱性
Movable Type 日本語版サイト: 【重要】 Movable Typeの脆弱性と対策についてによると、現在出荷済みのMovable Typeすべてにスパムメールの送信を幇助してしまう脆弱性が発見されたそうです。
同エントリーに回避策も載っています。対処方法は簡単で、パッチファイルをふつうのMTプラグインと同様pluginディレクトリにおくだけなので、早めに導入しておいたほうがよさそうです。
同エントリーに回避策も載っています。対処方法は簡単で、パッチファイルをふつうのMTプラグインと同様pluginディレクトリにおくだけなので、早めに導入しておいたほうがよさそうです。
2005年1月25日火曜日
nofollow pluginを導入
最近Blog業界でホットな話題「rel="nofollow"」ですが、MTユーザーはプラグインを使えば簡単にnofollowに対応できるということで早速導入してみました。
Movable Type Publishing Platform: Movable Type 'nofollow' plugin
ここからダウンロードできます。
導入は簡単で、tarかzipを解凍して出てきたファイルをpuluginディレクトリに放り込むだけです。
これでコメント内のリンクの属性に「rel="nofollow"」がつくようになります。
rel="nofollow"がついているリンクはGoogle,Yahooでページランクの計算対象としないことになったので、コメント内に書かれたリンクに対して、この属性を付加するようにすれば、スパマーにとって、nofollow対応済みのサイトに対するコメントは意味のないものになります。
スパマーはコメント内に自分のサイトへのリンクを書くことで、自分のサイトのページランクを上げて検索結果の上位に表示させようと考えているからです。
このようにnofollowに対応してもすぐにコメントスパムが送りつけらなくなるというものではありませんが、長い目で見るとかなり革命的なスパム対策だと思います。
Movable Type Publishing Platform: Movable Type 'nofollow' plugin
ここからダウンロードできます。
導入は簡単で、tarかzipを解凍して出てきたファイルをpuluginディレクトリに放り込むだけです。
これでコメント内のリンクの属性に「rel="nofollow"」がつくようになります。
rel="nofollow"がついているリンクはGoogle,Yahooでページランクの計算対象としないことになったので、コメント内に書かれたリンクに対して、この属性を付加するようにすれば、スパマーにとって、nofollow対応済みのサイトに対するコメントは意味のないものになります。
スパマーはコメント内に自分のサイトへのリンクを書くことで、自分のサイトのページランクを上げて検索結果の上位に表示させようと考えているからです。
このようにnofollowに対応してもすぐにコメントスパムが送りつけらなくなるというものではありませんが、長い目で見るとかなり革命的なスパム対策だと思います。
Extreme Perl オンラインドキュメント
Extreme Perl is online: blog.bulknews.netをみて知ったんですが、Extreme PerlというPerlを使ったXP(Extreme Programming)について書かれた本のHTML,PDFが公開されたそうです。
Extreme Perl: Home
読まなくては。
Extreme Perl: Home
読まなくては。
2005年1月24日月曜日
Gmail invitation再
実は最近あんまり使っていなかったGmailですが、久しぶりにログインしたらinvitationできるようになってました。どうしようもないことですが、Webベースだとローカルで動かすふつうのメーラと比べて速度の面で、もたつき感があるので、常用するには至りませんでした。。友人がやっていたんですが、メーリングリストの送信先をGmaiにしてお、アーカイブしておくっていう使い方はいいですね。Googleの検索機能が活用できるし。
ということで、Gmailアカウントほしい人はコメントください。
ということで、Gmailアカウントほしい人はコメントください。
2005年1月22日土曜日
2005年1月21日金曜日
個別アーカイブの再構築でエラー
突然、個別アーカイブの再構築を行うとこんなエラーがでて再構築に失敗するようになってしまいました。
>
該当のLocal.pmをのぞくとDigest::MD5のaddfileメソッドでこけているみたいです。
>
そこで開けないファイルの中身をみようとしたんですが、
>
。。。
う~ん、原因はわかりませんが、ファイルが壊れてしまっていたみたいです。壊れたファイルを削除して再構築をかけたら、今度は問題なく完了しました。めでたしめでたし。
>
<
Reading from filehandle failed at /usr/local/www/mt/lib/MT/FileMgr/Local.pm line 128.
該当のLocal.pmをのぞくとDigest::MD5のaddfileメソッドでこけているみたいです。
>
<
124 my $fh = gensym();
125 open $fh, $file or return 1;
126 if (eval { require Digest::MD5; 1 }) {
127 my $ctx = Digest::MD5->new;
128 $ctx->addfile($fh);
129 close $fh;
そこで開けないファイルの中身をみようとしたんですが、
>
<
$ cat 000224.html
cat: 000224.html: Input/output error
。。。
う~ん、原因はわかりませんが、ファイルが壊れてしまっていたみたいです。壊れたファイルを削除して再構築をかけたら、今度は問題なく完了しました。めでたしめでたし。
2005年1月20日木曜日
2005年1月17日月曜日
Date::Simple::Month 0.02
Date::Simple::Monthのバージョンを0.02にアップしました。
といっても特に機能追加はなく致命的なバグの修正のみです。0.01では内部で使用しているDate::Simpleをuseするのを忘れていて、単純に動いていませんでした。。
使おうとしてくださった方々、ごめんなさい。
といっても特に機能追加はなく致命的なバグの修正のみです。0.01では内部で使用しているDate::Simpleをuseするのを忘れていて、単純に動いていませんでした。。
使おうとしてくださった方々、ごめんなさい。
2005年1月14日金曜日
MFPM - My Favorite Perl Modules
お気に入りのPerlモジュールを管理できるMFPMというサイトが公開されたということで、早速登録してみました。
現在のところ、主な機能はこんな感じで、これからも便利な機能がどんどん追加されていきそうな予感。
-CPANモジュールの検索
-コメントをつきのお気に入りリスト
-モジュールのバージョンアップの検知
-モジュールに関する他人のコメント閲覧
-他人のお気に入りリスト閲覧
-自分のお気に入りリストを自分のBlogに貼り付けられる
-CPANモジュールに対してトラックバック送信可能
-お気に入りに登録しないモジュールに対してメモを残せる
モジュールに関する他人のコメントが読めるのはいいですね。新しいモジュールを試してみたいって時にまずはここにきて、そのモジュールの評判をみてみるってかんじで使えそう。
とりあえず自分のBlogにもリストを貼り付けてみました。
現在のところ、主な機能はこんな感じで、これからも便利な機能がどんどん追加されていきそうな予感。
-CPANモジュールの検索
-コメントをつきのお気に入りリスト
-モジュールのバージョンアップの検知
-モジュールに関する他人のコメント閲覧
-他人のお気に入りリスト閲覧
-自分のお気に入りリストを自分のBlogに貼り付けられる
-CPANモジュールに対してトラックバック送信可能
-お気に入りに登録しないモジュールに対してメモを残せる
モジュールに関する他人のコメントが読めるのはいいですね。新しいモジュールを試してみたいって時にまずはここにきて、そのモジュールの評判をみてみるってかんじで使えそう。
とりあえず自分のBlogにもリストを貼り付けてみました。
2005年1月11日火曜日
自作PerlモジュールをCPANでインストールする
今まで、新しくサーバを構築する時には、自作のPerlモジュールのインストールは一つ一つ、makeしてインストールってことをしていたんですが、モジュールの数が多くなってきていちいちインストールするのがしんどくなってきました。モジュールのインストールというとCPANモジュールを利用した方法が非常に簡単なので、自作モジュールも何とかCPANモジュールを使ってインストールできないか調べてみました。
すると、CPAN::Siteなるモジュールを発見。モジュールの作成日時が相当古いんでちょっと心配でしたが、とりあえず、試してみました。ドキュメントの通りに試してみるととりあえず、自作モジュールをCPAMモジュールを使ってインストールできるようになったんですが、普通にCPANに登録されているモジュールのインストールができなくなってしまいました。(検索してもHITしない)
何か設定が悪いのか、仕様なのかちょっと調べきれてませんが、なにやらいまいち。。
自作モジュールのインストール、他の人はいったいどうやっているんでしょうか。。
すると、CPAN::Siteなるモジュールを発見。モジュールの作成日時が相当古いんでちょっと心配でしたが、とりあえず、試してみました。ドキュメントの通りに試してみるととりあえず、自作モジュールをCPAMモジュールを使ってインストールできるようになったんですが、普通にCPANに登録されているモジュールのインストールができなくなってしまいました。(検索してもHITしない)
何か設定が悪いのか、仕様なのかちょっと調べきれてませんが、なにやらいまいち。。
自作モジュールのインストール、他の人はいったいどうやっているんでしょうか。。
bundleを作成してPerlモジュールのインストールを簡単に
perlにはCPANというとても便利で強力なサイトがあり、そこに登録されている膨大な数のPerlモジュールを利用することにより、面倒なプログラミングを簡単にできたりするんですが、Perlモジュールを多用しはじめると、そのインストールが結構面倒くさくなってきます。特に新たにサーバをたてて、システムを新規に構築するなんて時はモジュールのインストールだけでかなり時間がかかってしまうってことになりかねません。
そこでいつも使うようなモジュールをリストにまとめておき、一発でインストールできれば、非常に便利ですし時間も節約できます。CPANではBundleを使うことによりそのようなことを実現できます。
Bundleはそれ自体がPerlモジュールです。Bundleは以下の手順で作成します。
- まずBundle::の名前空間を持つモジュールとして作成する
- =head1 CONTENTSというPODセクションを作成し、そこにモジュールのリストを記述する
- 記述方法はModule_Name [Version_String] [- optional text]
- 作成したBndle::Fooをパスの通った場所におき、perl -MCPAN -e install 'Bundle::Foo'
詳しくはperldoc CPANすると書いてあります。また、CPANでBundleで検索するとたくさんヒットしますので、それを参考にすれば簡単にかけると思います。
そこでいつも使うようなモジュールをリストにまとめておき、一発でインストールできれば、非常に便利ですし時間も節約できます。CPANではBundleを使うことによりそのようなことを実現できます。
Bundleはそれ自体がPerlモジュールです。Bundleは以下の手順で作成します。
- まずBundle::の名前空間を持つモジュールとして作成する
- =head1 CONTENTSというPODセクションを作成し、そこにモジュールのリストを記述する
- 記述方法はModule_Name [Version_String] [- optional text]
- 作成したBndle::Fooをパスの通った場所におき、perl -MCPAN -e install 'Bundle::Foo'
詳しくはperldoc CPANすると書いてあります。また、CPANでBundleで検索するとたくさんヒットしますので、それを参考にすれば簡単にかけると思います。
2005年1月10日月曜日
picasaで画像管理
picasa (画像ビューワソフト): Epic->yoshimax
yoshimaxさんのサイトで紹介されていたGoogleからフリーで配布されている画像管理ソフト。以前どこかのブログで紹介されていて自分のPCにもインストールしたんですが、インストールしたことを忘れていてました(汗)
yoshimaxさんの記事をみてインストールしていたことを思い出して、自分のPCを確認してみると、タスクバーに常駐していてPC内の画像検索していたようです。picasaを起動してみると、検索された画像が大量にリストアップされてます。使い方が直感的で使ってみたいと思わせるアプリですが、フォルダの奥の奥の方にこっそりしまっておいてそのまま忘れてしまったアレな画像とか出てきそうでちょっと怖いかもw
yoshimaxさんのサイトで紹介されていたGoogleからフリーで配布されている画像管理ソフト。以前どこかのブログで紹介されていて自分のPCにもインストールしたんですが、インストールしたことを忘れていてました(汗)
yoshimaxさんの記事をみてインストールしていたことを思い出して、自分のPCを確認してみると、タスクバーに常駐していてPC内の画像検索していたようです。picasaを起動してみると、検索された画像が大量にリストアップされてます。使い方が直感的で使ってみたいと思わせるアプリですが、フォルダの奥の奥の方にこっそりしまっておいてそのまま忘れてしまったアレな画像とか出てきそうでちょっと怖いかもw
2005年1月5日水曜日
Thunderbirdの迷惑メールフィルタがいい感じ
メーラは今までBeckyを使っていたんですが、正月休みを利用して通信のSSL化などメール環境のセキュリティを強化したところ、Beckyでは、IMAP-SSLのデフォルトポートの993以外のポートでメールを受信できなかったので(BeckyのReadmeにはできるって書いてあったんですが、僕はできませんでした。。)、前から気になっていて1.0日本語版が正式にリリースになったThunderbirdを使ってみることにしました。正月から使い続けていますが迷惑メールフィルタが結構いい感じです。
まだ数日しかたっていないのにかなり正確に迷惑メールを判別してくれます。このままのりかえちゃうかも。
まだ数日しかたっていないのにかなり正確に迷惑メールを判別してくれます。このままのりかえちゃうかも。
2005年1月4日火曜日
MT3.x+mod_perl環境でMTプラグインのロードに失敗するとエラーになる
結構前からなぜかmod_perl環境でMTが動かなくなってしまっていて、しょうがなくCGI環境で動かしていたんですが、どうにも遅くてやりきれないので、ちょっとMTのソースを追ってみました。
エラーの内容はこんな感じです。
>
App.pmの該当行ををみてみるとどうやら、apacheのリクエストオブジェクトが空のためエラーになっている模様。さらにソースを追ってみると、親クラスのMT.pmでのinitでこけていることが判明。そこでMT.pmにwarnを仕込んでデバッグしてみたところ、プラグインのロードに失敗した際に呼ばれるlogメソッドが原因だと判明しました。
MT.pmのinitメソッド内では、pluginのreiquireに失敗すると、$mt->logメソッドを呼び出すのですが、このlogメソッドはMT::App.pmで定義されたlogメソッドによりオーバーライドされています。
そのMT::App::logでは$mt->{apache}->connectionを呼び出しているのですが、$mt->{apache}はこの時点ではまだ生成されていないため、最初に書いたようなエラーがでていたのでした。
このエラーを回避し、プラグインのロードに失敗した際もMTが止まらないようにするためには、失敗した際に、$mt->logではなくMT::logを直接呼び出すように書き換えればOKだと思います。とりあえずパッチを書いてみました。
>
エラーの内容はこんな感じです。
>
<
Got an error: Can't call method "connection" on an undefined value at /path/to/mt/lib/MT/App.pm line 594.
App.pmの該当行ををみてみるとどうやら、apacheのリクエストオブジェクトが空のためエラーになっている模様。さらにソースを追ってみると、親クラスのMT.pmでのinitでこけていることが判明。そこでMT.pmにwarnを仕込んでデバッグしてみたところ、プラグインのロードに失敗した際に呼ばれるlogメソッドが原因だと判明しました。
MT.pmのinitメソッド内では、pluginのreiquireに失敗すると、$mt->logメソッドを呼び出すのですが、このlogメソッドはMT::App.pmで定義されたlogメソッドによりオーバーライドされています。
そのMT::App::logでは$mt->{apache}->connectionを呼び出しているのですが、$mt->{apache}はこの時点ではまだ生成されていないため、最初に書いたようなエラーがでていたのでした。
このエラーを回避し、プラグインのロードに失敗した際もMTが止まらないようにするためには、失敗した際に、$mt->logではなくMT::logを直接呼び出すように書き換えればOKだと思います。とりあえずパッチを書いてみました。
>
<
--- MT.pm.orig Tue Jan 4 05:27:34 2005
+++ MT.pm Tue Jan 4 05:27:42 2005
@@ -292,7 +292,7 @@
$plugin = $1;
eval { require $plugin };
if ($@) {
- $mt->log("Plugin error: $plugin $@");
+ MT::log("Plugin error: $plugin $@");
return 0;
}
return 1;
登録:
投稿 (Atom)