2005年3月31日木曜日

Sledge + MySQL4.1でセッションを保存できない

Sledge+MySQL4.1な環境でセッションを保存できないという状況に陥りました。
現象としては、セッション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冊発売。早速購入しました。

no image
Dru Lavigne 林 秀幸
オライリージャパン (2005/03)
通常2~3日以内に発送


no image
Michael Fitzgerald 木下 哲也 福龍興業
オライリージャパン (2005/03)
在庫切れ



no image
Sid Steward 千住 治郎
オライリージャパン (2005/03)
在庫切れ




2005年3月28日月曜日

google golf (ゴルフ)

google golf (ゴルフ): Epic->yoshimaxより

おもしろそうなので、やってみましたが結構むずい。。



タージマハール蒲田店

蒲田でカレー屋と言えばここ!と評判の「タージマハール蒲田店」に行ってきました。
蒲田駅西口の東急ガード下にある飲食街を少し進むと左手にあります。
店構えはちょっと怪しくて、おいしいと知らなければちょっと入りづらい感じ。
店内はカウンターのみで、結構狭く、周りにはインドの写真や、買ってきた食材が置いてあったりと、雑然としています。
これだけみると、ほんとにここが噂のおいしい見せなのかちょっと心配になります。

が、実際にカレーを食べると、さらさらとしていて結構辛いんですが、かなりうまい!
今回、僕は「スペシャルインドカレー」を、奥さんは「ボンベイムング(子羊と豆のカレー)」を注文しましたがどちらもとてもおいしかったです。次はキーマカレーか?

>

タージマハール 蒲田店

東京都大田区西蒲田7-70

03-3734-0913

<

2005年3月25日金曜日

mod_perl + encodingプラグマでサイト全体が文字化け

perl5.8から導入されたencodingプラグマを利用してSTDOUTの文字コードを透過的にエンコーディングして出力するようなスクリプトをmod_perl環境で実行すると、encodingプラグマの影響がそれを実行したapacheプロセスに残ってしまい、それ以降に実行されるすべてのスクリプトもこの影響を受けてしまうようです。

仮に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;
<

ティングラーを購入

王様のアイデアにてティングラーを購入しました。2650円也。ツボ天国の頭を心地良く刺激して神経を活性化させてくれるアメリカからやってきた幸福のヘッドマッサージ器で、ちょっと前にLAで大人気だった商品だそうです。

実際に使ってみると冷たい金属が頭皮に当たって何ともいえないゾクゾク感を感じます。でも2650円はちょっと高いような気も。。電動式もあるみたいw

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-com.pl - コメントスパム対策プラグイン

以前のエントリーでコメントスパム対策として「コメントにひらがながM回連続している部分がN箇所以上ない場合スパムとみなして、はじく」ということをやりましたが、これをMTプラグイン化してみました。

mt-ban-nonja-com.pl

前回からの変更点として、以前のエントリーではひらがなのみの連続としていたところを、ひらがなもしくはカタカナの連続としています。

上記プラグインをmtのプラグインディレクトリに放り込んでやれば動くと思います。ひらがなの連続する回数と出現箇所はプラグイン内にかかれているグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
また、$Method = "moderate"; でモデレート、"deny" で投稿を拒否します。このあたりの実装はmiyagawaさんのMTBanASCIIを参考にさせて頂きました。





サイトリニューアルしました。

hori-uchi.comをリニューアルしました。
デザインをしてくれたkawachi君に感謝!!大事に使わせてもらいますね。
絵心がない僕にとって、さくっとこんなにすてきなサイトをデザインできるなんて、ほんと尊敬しちゃいます。

サイトの方ですが、まだTOPと個別アーカイブのみ新デザインを適用した状態で、他の部分はデザインぐちゃぐちゃですが、徐々に直していきます。



かにみそは脳みそじゃない

どうでもいいことですが、かにみそってかにの脳みそじゃなくて内臓なんですね。普通に考えると当たり前なんですが、ずっと脳みそだと思い込んでた。


2005年3月21日月曜日

あべちゃん



妹に会いに麻布十番に行ってきました。その途中でみかけた「やきとりあべちゃん」を撮影。今その帰りの電車の中です。




2005年3月20日日曜日

画像を使わず角の丸いボックスを表示する

[を] CSSで角を丸くするより



画像を使わないで角の丸いボックスを作れるんですね。








hori-uchi.com









2005年3月19日土曜日

gonzui Perl対応

gonzui Perl 対応: blog.bulknews.netより

miyagawaさんがgonzuiのPerl対応をしたそうです!熱すぎます!

さらにCPANモジュールをgonzuiを使って検索できるCPAN code search by gonzuiも同時に公開。ため息が出ます。。
これでperlユーザはCPANに登録された大量のコードをいつでも簡単に参照することができるようになるわけですね。




水戸納豆スナック



恐る恐る食べたけど以外においしい!




2005年3月16日水曜日

これだけは知っておきたい個人情報保護

これだけは知っておきたい個人情報保護
岡村 久道 鈴木 正朝
日本経済新聞社 (2005/01)
売り上げランキング: 8
通常2~3日以内に発送
おすすめ度の平均: 4.62
5 「これで十分!!」
4 入門編としてなら可
5 もっとこういう本がでてほしい


薄くて一気に読めます。お手軽に個人情報保護法の概要がつかめる一冊だと思います。525円と安いですし、最初に読む本としておすすめ。




amaztype - 関連する商品で文字を描く

amaztypeに感動。AWSを使って入力したキーワードに関する書籍やCDの画像をとってきて、その画像でキーワードを描きます。描画にはFlashを使ってますね。



Googleデスクトップ検索日本語版公開

Google デスクトップ検索日本語版が公開されてます。
機能は3月7日に公開されて英語版と同等だそう。


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のセクションに以下の記述がありました。

>
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品。

肉生春巻きは具がぎっしりで大ぶりなのに、しっかり巻かれていて、食べてる間にぼろぼろ崩れることもありませんでしたし、バインセオも野菜たっぷりでおいしい。デザートの揚バナナとベトナム風しるこも普段食べたことない味に満足しました。
ただ、パクチーが大の苦手な僕にはそれが大量に入った「山芋のスープ」はちょっと飲めませんでした。また、「鶏肉のフォー」と「青パパイヤのサラダ」にもすこしパクチーが入っていて、ちょっと苦戦。。
このエントリーを書いている今も何となくパクチーのにおいがするような気がします。。

パクチーや香草が苦手な人には食べられない料理も多そうですが、それが好きって人にはたまらないお店ではないかと思います。




3/29にオライリーよりHacks3冊発売

XML Hacks : NDO::Weblogより

3月29日にオライリーから、XML HacksBSD HacksPDF Hacksの3冊が発売されるそうです。
Hacksやクックブックは一つ一つの記事が簡潔で読みやすいのと、目次からやりたいことを見つけやすいので、とても気に入っています。
それにしてもPDF Hacksにはどんなことがかかれているんでしょうか。すごく読みたい。


とんかつ和幸はひとつじゃなかった

とんかつ和幸への不思議より

とんかつ和幸って3つもあったんですね。どこに行っても和幸ってあるような気がしてましたが、3社もあったのならそれもうなずけます。会社の近くの和幸はどれだっけ??



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管理ツールで管理の省力化


2005年3月8日火曜日

ThunderbirdのメールボックスもインデックスするGDS

Hello GDS, Goodbye YDS (by Jeremy Zawodny)より

最近リリースされたGDS(Google Desktop Search)はThunderbirdのメールボックスもインデックスしてくれるみたいです。メールの検索をGoogleで行えるようになるとかなり便利になりそう。
OSの再インストールをしてからGDSを入れてなかったんですが、また入れてみようと思います。



MovableType with PostgreSQLのインストールでの注意点

MovableTypeのインストールでストレージにPostgreSQLを選択した場合、ある条件でmt-load.cgi実行時に以下のエラーがでました。
>

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解剖学 よくわかるリレーショナルデータベースの仕組み
鈴木 幸市 藤塚 勤也
翔泳社 (2005/02/22)
売り上げランキング: 9,460
通常24時間以内に発送


これもおすすめらしい。

CSSクックブック

CSSクックブック―Webデザインのための活用テクニック集
Christopher Schmitt ドキュメントシステム
オライリー・ジャパン (2005/02)
売り上げランキング: 1,733
通常3日間以内に発送
おすすめ度の平均: 3
3 やっと出た、オライリーの「CSSクックブック」。


クックブックとかHackがついたオライリー本はどうしてもほしくなりますね。
この本結構評判がいいようなので購入予定。


2005年3月2日水曜日

Path::Class - Cross-platform path specification manipulation

search.cpan.org: Ken Williams / Path-Class
ファイルのPathをオブジェクトとして扱えないかなーと思って探していて見つけたモジュール。
File::Specよりシンプルにパスを扱えるてよさげ。