Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2006-10-31(Tue)

CGI::SessionのserializerにStorableを指定しているとcoreを吐くようになってしまった。

| 13:03 |  CGI::SessionのserializerにStorableを指定しているとcoreを吐くようになってしまった。 - 浅倉卓司@blog風味? を含むブックマーク  CGI::SessionのserializerにStorableを指定しているとcoreを吐くようになってしまった。 - 浅倉卓司@blog風味? のブックマークコメント

 理由はよく分からない。今までと構成を変えたつもりは無いのだけれど*1

 挙動からするとCGI終了時にsessionファイルに出力しようとするタイミングでcoreを吐いているようにも見える(sessionファイルがないとcoreを吐かないので)。


 とりあえずdefaultにしたらcoreを吐かなくなったのでそれで対応。

 あとで時間があったら追いかけることにしよう……。

*1:CGI::Sessionは4.14、Storableは2.15。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061031

2006-10-30(Mon)

Encodeのfallbackでは対処できない(orしにくい)っぽい。

| 19:55 |  Encodeのfallbackでは対処できない(orしにくい)っぽい。 - 浅倉卓司@blog風味? を含むブックマーク  Encodeのfallbackでは対処できない(orしにくい)っぽい。 - 浅倉卓司@blog風味? のブックマークコメント

 調べてみたら、fallback関数に渡されるのはUnicode文字のord(数値)だけらしい。そしてfallback関数はoctetを返さなくちゃいけない。

 ということはつまり、文字コードごとにfallback関数を用意して適切に切り替えなくちゃいけない。さすがにちょっと面倒なので、Encodeのfallbackを利用するのはヤメ。


 Jcodeオブジェクトのプロパティにnormalizeを追加して、そのプロパティに指定したcode_refでnormalize処理をかければよさげ。

 この辺りはJcode本体で対応してもらったほうがいい気もするので、もうちょっと仕様を固めたら提案することにしましょう。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061030

2006-10-29(Sun)

Jcode::CP932での正規化処理

| 00:02 |  Jcode::CP932での正規化処理 - 浅倉卓司@blog風味? を含むブックマーク  Jcode::CP932での正規化処理 - 浅倉卓司@blog風味? のブックマークコメント

 Encodeのどこかのバージョンから*1、変換に失敗したときに呼び出す関数を指定できるようになった記憶がある。ということは、そこで呼び出す関数を用意して、

$FALLBACK = \&FB_NORMALIZE_CP932;

sub FB_NORMALIZE_CP932 {
    ...
}

――とかしておけばいいはず*2

 EncodeのFallBack関数の書き方はあとで調べよう……。


 あとは

sub normalize_cp932 {
    my $str_ref = ref $_[0]? $_[0]: \$_[0];
    $$str_ref =~ tr/$utf8_jis/$utf8_cp932/;
    return $$str_ref;
}

――みたいな正規化関数を作るといいのかな。

*1:2.12でした。Perl5.8.8以降かな。ActivePerlはbuild816以降みたいです。

*2:ついでにFB_NORMALIZE_JISとか作るといいか。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061029

2006-10-28(Sat)

Jcode::CP932を作らなくても平気な気がしてきましたよ。

| 01:37 |  Jcode::CP932を作らなくても平気な気がしてきましたよ。 - 浅倉卓司@blog風味? を含むブックマーク  Jcode::CP932を作らなくても平気な気がしてきましたよ。 - 浅倉卓司@blog風味? のブックマークコメント

(註:結局Jcode::CP932はCPANにアップしました。)

 Jcode.pmにちょっとしたpatchをあてるだけで、Jcode::CP932はこんなにすっきりしてしまいましたよ。

package Jcode::CP932;
require 5.008001;
our $VERSION = '0.05';

use warnings;
use strict;

use Jcode ();

our @ISA         = qw(Jcode);
our @EXPORT      = qw(jcode getcode);
our @EXPORT_OK   = qw($VERSION $DEBUG);
our %EXPORT_TAGS = ( all       => [ @EXPORT, @EXPORT_OK ] );

our $DEBUG;
our $FALLBACK;
*DEBUG    = \$Jcode::DEBUG;
*FALLBACK = \$Jcode::FALLBACK;

use overload 
    q("") => sub { $_[0]->euc },
    q(==) => sub { overload::StrVal($_[0]) eq overload::StrVal($_[1]) },
    q(.=) => sub { $_[0]->append( $_[1] ) },
    fallback => 1,
    ;

my $pkg = __PACKAGE__;

sub jcode {
    return $pkg->new(@_)
}

*getcode      = \&Jcode::getcode;

foreach my $func (qw/convert set append/) {
    no strict 'refs';
    *{"$pkg\::$func"} = \&{"Jcode::$func"};
}

use Encode::EUCJPMS;
$pkg->set_jname2e(
    sjis        => 'cp932',
    euc         => 'cp51932',
    jis         => 'cp50221',
    iso_2022_jp => 'cp50220',
    ucs2        => 'UTF-16BE',
);

1; # End of Jcode::CP932
__END__

 んで、Jcode.pmにあてるpatch(というか追加するメソッド)はこんな感じ:

sub set_jname2e {
    my $class = shift;
    my %new_jname2e = @_;
    foreach my $enc (keys %new_jname2e) {
        my $name = $new_jname2e{$enc} || $enc;
        my $e = find_encoding($name) or croak "$enc not supported";

        $jname2e{$enc}  = $name;
        $ename2j{$name} = $enc;
        no strict 'refs';
        no warnings 'redefine';
        *{"$class\::$enc"} = sub {
            my $r_str = $_[0]->{r_str};
            Encode::is_utf8($$r_str) ?
                $e->encode($$r_str, $_[0]->{fallback}) : $$r_str;
        };
    }
}

 要するにsjiseucへ変換するメソッドを書き換えるメソッド、ですね。

 もっといい方法があるのかもしれませんが、とりあえず。

 いかがでしょうか?>弾さん



 ちなみに上記のJcode::CP932-0.05は0.04と違い、Jcodeの動作にも影響を与えてしまいます(たぶん)。これは%jname2eと%ename2jを変更するため、convert,set,appendに影響を与えるためです*1

 したがってJcode::CP932なんてわざわざ作らなくても、Jcode.pmにset_jname2eメソッドを追加して、

use Encode::EUCJPMS;
Jcode->set_jname2e(
    sjis        => 'cp932',
    euc         => 'cp51932',
    jis         => 'cp50221',
    iso_2022_jp => 'cp50220',
    ucs2        => 'UTF-16BE',
);

――とかすればいいんじゃね? って話もあります*2

 うーん。Jcode::CP932を作るんであれば正規化処理を追加するのがいいかな。。。

 少なくともJcodeまわりのどこかで正規化処理を用意するのがよさそうだと思うんだけれど。

*1:逆に、ここに手を出せないために0.04ではいろいろ変なことをしてる。

*2:ただしこの場合は上記を正しく設定する必要があるので、あまり親切ではない気もします。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061028

2006-10-27(Fri)

Encode::EUCJPMSのバージョンが上がってるじゃん。

| 23:14 |  Encode::EUCJPMSのバージョンが上がってるじゃん。 - 浅倉卓司@blog風味? を含むブックマーク  Encode::EUCJPMSのバージョンが上がってるじゃん。 - 浅倉卓司@blog風味? のブックマークコメント

 メーリングリストを見ていたら、ミラクルリナックスの森山さんからレガシーエンコーディングプロジェクトの報告が。ざっとながめると

※ Encode::EUCJPMS で CP50220 と CP50221 が利用できるため、ISO-2022-JP-MS ではなく、そちらの方を使用するのが望ましいと思われます。

――という記述がある。

 あれ? と思ってCPANのEncode::EUCJPMSを見ると、8月にCP5022x対応版が上がってるじゃないですか。知らなかった……。


 というわけで前に書いた

 Encode::CP5022x相当が実装されれば、Classic部分を削除してCPANに登録しよう……。

Jcode::CP932 - 0.04

――が、実装可能になったのでぼちぼち作業しようかと思うのですが、何かご意見がありましたらよろしくお願いいたします*1


 それはそれとして。

 僕がレガシーエンコーディングプロジェクトに期待していたのは主に

 森山さんは「JIS系とCP932系の相互変換は出来ないと考えておいた方が無難」と書かれていますが、問題が生じる可能性があることを認識のうえで――例えば「相互変換」ではなくどちらかに寄せる対応になると認識したうえで正規化する変換はあったほうが良いと思うのです。


 なぜならUTF-8Unicode)で流通しているテキストをレガシーエンコーディングに変換する必要がまだあって、そのUnicodeなテキストがCP932系なのかJIS系なのかは判別することができないからです。そういう時はなんらかのポリシー(CP932系にするかJIS系にするか)で正規化するようにしないと困ったことになるような気がします。


 確かAmazonのデータはCP932系らしく「~」はU+FF5Eで送られてきたと思うのですが*1、本当にCP932系なのであればそれをJIS系のエンコードに変換すると問題が生じたりするはずですし。そういう時に変換できないと困るんじゃないかと思うのです。

とりあえずレガシーエンコーディングプロジェクトの成果待ち

――だったのですが、これへの対策は特にないんですね。うーん、どうしたものか。

 とりあえず

   文字 SJIS     EUC      JIS       Unicode   Unicode での
         コード値 コード値 コード値  コード値  文字の名前
   ----- -------- -------- --------- --------  ----------------------
    ―    0x815C   0xA1BD   0x213D    U+2015    HORIZONTAL BAR
    ~    0x8160   0xA1C1   0x2141    U+FF5E    FULLWIDTH TILDE
    ∥    0x8161   0xA1C2   0x2142    U+2225    PARALLELE TO
    -    0x817C   0xA1DD   0x215D    U+FF0D    FULLWIDTH HYPHEN-MINUS
    ¢    0x8191   0xA1F1   0x2171    U+FFE0    FULLWIDTH CENT SIGN
    £    0x8192   0xA1F2   0x2172    U+FFE1    FULLWIDTH POUND SIGN
    ¬    0x81CA   0xA2CC   0x224C    U+FFE2    FULLWIDTH NOT SIGN

だけ正規化すれば問題なし?


はてなグループのファイル共有って、有料オプションを外したら消えちゃうorアクセスできなくなっちゃうの?

| 23:45 |  はてなグループのファイル共有って、有料オプションを外したら消えちゃうorアクセスできなくなっちゃうの? - 浅倉卓司@blog風味? を含むブックマーク  はてなグループのファイル共有って、有料オプションを外したら消えちゃうorアクセスできなくなっちゃうの? - 浅倉卓司@blog風味? のブックマークコメント

 もしそうなのならちゃんと書いておいてくださいよ……>g:hatena:id:hatenagroup

 ファイルのアップはできなくてもダウンロードは継続されるものだとずっと思ってました。

 さて、どうしたものか。

dankogaidankogai2006/10/27 23:16最後の*1に関してはPatches Welcomeだす。Encode本体をいじるのはちょっときつい。

asakura-tasakura-t2006/10/27 23:23Encodeを触る必要はないと思います(確か)。
Jcode::CP932を作るのはいいのですが、Jcode.pmのハードコーディングされてる部分を変更していただけると嬉しいです。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061027

2006-10-26(Thu)

掲示板文化とブログ文化の違いは会話があるかないかじゃないのかな。

| 12:10 |  掲示板文化とブログ文化の違いは会話があるかないかじゃないのかな。 - 浅倉卓司@blog風味? を含むブックマーク  掲示板文化とブログ文化の違いは会話があるかないかじゃないのかな。 - 浅倉卓司@blog風味? のブックマークコメント

 掲示板に会話はあるけど、ブログには会話がない。

 だから会話を求める人は掲示板(2chとかmixiとか)に向かう。会話なんてなくてもいい人がブログ(の書き手)に残る。

 そしておそらく人数としては会話を求める人のほうが多い。だから現状(の2chmixi)より会話をしやすいシステム(場所)があれば、きっとそこに人は集まるんだろうと思う。

 Lingerはそれを目指してるのかもしれないし、違うのかもしれないけど。技術は見えるけど思想がよく見えないからちょっと分からない。


 ところで、みんなが大好きな「議論」はどっちのほうが向いてるんだろうか。

 ブログのほうが落ち着いた「議論」になるような気がするけれど、掲示板と違って「議論」の流れが見えない(それに流れを追うのは大変だ)というデメリットがある。

 僕は「議論」の流れが見えるほうが好みだし、発散しても構わないと思うから、掲示板のほうがいいと思ってる。でも論壇誌を読むような人はブログのほうがいいんだろうな、とも思う。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061026

2006-10-24(Tue)

今更のようにアイボール戦争についての言論が耳目を集めているようですが、

| 14:07 |  今更のようにアイボール戦争についての言論が耳目を集めているようですが、 - 浅倉卓司@blog風味? を含むブックマーク  今更のようにアイボール戦争についての言論が耳目を集めているようですが、 - 浅倉卓司@blog風味? のブックマークコメント

なんで今頃なんでしょ? とか思ったらPS3とかWiiが出るからか……。


 ところで「アイボール戦争」って言葉は10年くらい前、インターネットが一般向けになった頃に一部で流通してたと思うんだけど*1、今でも通用するのかな? ともあれ、昔から繰り返されてた話題であって、「アイボール戦争には参加しない戦略」がいい、ってなことを考えていたのが2000年ごろ。

 だってさー、可処分時間は可処分所得よりも増やしにくいし、可処分所得が大きい(金払いのいい)人は可処分時間が少ないんだから*2、その少ない可処分時間を争うのは不毛な気がするじゃないですか。だったら可処分時間を争わない(アイボール戦争を戦わない)ほうがいいんじゃね? とか、そんなことを考えてたわけですよ。そんなわけで当時自分が立てた企画は「なるべく顧客の時間を奪わない」方向で考えてた*3

 まあそのうち可処分時間を減らさないサービスその他が充実するじゃろ、とか思って待ってたのに全然増えないし*4、逆に可処分時間を奪う方向のサービスばかり注目されててげんなりしてる今日この頃。


 可処分時間を奪わないサービスは既存の価値観とはある意味真逆なので商売としては成立しにくいのかもしれませんが。

*1:それ以前にもあったのかもしれないけど、それについては知らない。

*2:もっとも、お金と時間は交換できるから単純にそう言いきれないんだけどー。

*3:それが効果的だったかどうかを検証はできなかったけど。いろいろあって会社がなくなったし。

*4:自分で何かしようと思わないのがヘタレだ。アイデアだけがあっても意味ないしねぇ。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061024

2006-10-23(Mon)

PHPで言うところの参照は、参照(リファレンス)じゃなくて別名(エイリアス)なんですよね?

| 16:40 |  PHPで言うところの参照は、参照(リファレンス)じゃなくて別名(エイリアス)なんですよね? - 浅倉卓司@blog風味? を含むブックマーク  PHPで言うところの参照は、参照(リファレンス)じゃなくて別名(エイリアス)なんですよね? - 浅倉卓司@blog風味? のブックマークコメント

 PHPの参照(リファレンス)って、参照じゃなくて別名(エイリアス)である、という理解でいいんですよね?

PHP において、リファレンスとは同じ変数の内容を異なった名前でコールすることを意味します。これは C のポインタのようなものではなく、シンボルテーブルのエイリアスです。PHP では、変数名と変数の内容は異なっており、このため、同じ内容は異なった複数の名前を有する事が可能であることに注意してください。最も良く似ているのは、Unix のファイル名とファイルの 関係です。この場合、変数名はディレクトリエントリ、変数の内容は ファイル自体に対応します。リファレンスは、Unix ファイルシステムの ハードリンクのようなものであると考えられます。

――って書いてあるし。

 だとしたらわざわざ紛らわしい「リファレンス」なんて名付けるなよ。アホちゃうか。

 ずっと騙されてましたよ……。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061023

2006-10-21(Sat)

Shibuya.pmのtech talk #7に行ってきた。

| 17:18 |  Shibuya.pmのtech talk #7に行ってきた。 - 浅倉卓司@blog風味? を含むブックマーク  Shibuya.pmのtech talk #7に行ってきた。 - 浅倉卓司@blog風味? のブックマークコメント

 レポートは沢山アップされているみたいなので、どーでもいいツッコミを少し。


PMConnect

 「JavaScriptに渡したsub_ref(functionオブジェクト)にプロパティを追加したらどーなるの?」という質問に「特に何も起こりません」的な受け答えがあったので、「それってblessed sub_refにしちゃうといいんじゃね?」とか一瞬思った。

 それで旨みがあるのかどうかは分かんないけど、とりあえず追加したプロパティは取得できるようになるはず。


ppmパッケージができるまで

 「CPANでインストールしましょう」じゃなくて「ppm_installでCPANからインストールしましょう」のほうがちょっとだけ嬉しいかもしれません。cpanシェル使って入れちゃうと、あとでppmで入れるときにちょっと悲しいことになるから。

 あれ、ひょっとしてppm_installだと依存をチェックしないんでしたっけ?ちゃんとチェックされました。


俺とマッシュアップ

 1,000円/月かぁ。ネタが思いつけば契約してもいいかもしんない。


CDBI to DBIC

 CDBIについてはCDBI:Sweetを使えばちょっとはマシになります。JOINとか。

 が、新しい案件の時はDBICを使ったほうが嬉しいよなぁ。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061021

2006-10-12(Thu)

PHPのクラス関数の扱いがよく分からない。

| 14:13 |  PHPのクラス関数の扱いがよく分からない。 - 浅倉卓司@blog風味? を含むブックマーク  PHPのクラス関数の扱いがよく分からない。 - 浅倉卓司@blog風味? のブックマークコメント

 単に

class Foo {
  function class_func() {
    // ここで_get()を呼びたい
    // オブジェクトなら$this->_get()でOK
  }
  function _get() {
  }
}

class Bar extends Foo {
  function _get() {
  }
}

Bar::class_func();

――ということがしたいのですが、どうすればいいんでしょうかね。

 とにかくインスタンス作って

$bar = new Bar;
$bar->class_func();

しろって話なのかな。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061012

2006-10-03(Tue)

うっかりppm install Jiftyとか打ってしまった。

| 23:35 |  うっかりppm install Jiftyとか打ってしまった。 - 浅倉卓司@blog風味? を含むブックマーク  うっかりppm install Jiftyとか打ってしまった。 - 浅倉卓司@blog風味? のブックマークコメント

 まるごとPerlに「ActivePerlだと入れるの難しいかも」とか書かれていたので、試しに「ppm install Jifty」とか打ったら*1ものすごい勢いでモジュールがインストールされていくよ……。

 Catalystも突っこんでいた気がするんだけど。使ってるモジュールは案外重複してないのかな。



はてなグループで勝手に自分のその日の記事にトラックバックが打たれる件について。

| 23:37 |  はてなグループで勝手に自分のその日の記事にトラックバックが打たれる件について。 - 浅倉卓司@blog風味? を含むブックマーク  はてなグループで勝手に自分のその日の記事にトラックバックが打たれる件について。 - 浅倉卓司@blog風味? のブックマークコメント

 ひょっとして、プレビューしてから登録するのが悪い?

*1:searchにしとけ、って話はある。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061003

2006-10-02(Mon)

PHPでハマった話(オブジェクト編)

| 13:48 |  PHPでハマった話(オブジェクト編) - 浅倉卓司@blog風味? を含むブックマーク  PHPでハマった話(オブジェクト編) - 浅倉卓司@blog風味? のブックマークコメント

 PHPでコードを書いててハマるのはPerlを使ってるからとは限らない。

 フツーに

$foo = new Foo;
$foo->set_var( 1 );

$bar = $foo;
$bar->set_var( 2 );

echo $foo->get_var();
echo $bar->get_var();

――とかやった時に違う値が返って来たときには死ぬかと思った。

 まあ上記のようなケースは稀だと思うけれど、

function my_func( $foo ) {
  $foo->set_var( 3 );
}

$foo = new Foo;
my_func( $foo );
echo $foo->get_var();  // あれ、3出力されないぞ?

――とかは普通にやってて、しばらく悩んだ覚えがあります。

(あとはforeachでオブジェクトを操作した時とか)


 ……PHP5では修正されてるんだっけ?

 変更すると互換性で大変なことになりそうだけど。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061002

2006-10-01(Sun)

愛用しているキーボードが生産中止になってる!

| 22:51 |  愛用しているキーボードが生産中止になってる! - 浅倉卓司@blog風味? を含むブックマーク  愛用しているキーボードが生産中止になってる! - 浅倉卓司@blog風味? のブックマークコメント

 最近キーの利きが甘くなってて買い換えなくちゃ駄目かなぁなんて考えていた愛用のキーボードですが、生産中止になってますよ……。

 まだどっかに在庫が残ってるといいなぁ。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20061001
2004 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 | 05 |