2009年4月3日

ハッシュの値へのリファレンスを取得しました

my $hash_ref = { hogehoge => 1 };
my $scalar_ref = ¥($hash_ref->{hogehoge});
$hash_ref->{hogehoge} = 2;
print $$scalar_ref, "¥n";
初めは取れるのか?と思ってたのだが、意外とあっさり。

本当は、、
my $object = Class->new;
my $scalar_ref = ¥($object->hogehoge);
$object->hogehoge(2);
print $$scalar_ref, "¥n";
みたいに、アクセサーから取得したかったのだけど、どうやら、returnの時に値のコピーが発生しているようで、取得できなかった。。。

まぁ、なんで、こんな事がやりたかったかと言うと、DB上にファイルを保存する事になって、そのファイルの内容を取り出す関係で、極力、変数のコピーは避けたかったので、、、という説明じゃわからないね。まぁ、そんな感じの時に必要だったのよ。

簡単に説明すれば、DBIx::Class::InflateColumn::Fileしたかったの。

IO::Fileに、変数の参照渡して、スカラー変数をファイルみたいに、open したかった。

2009年1月23日

iAntiVirusが暴走する...

何かのひょうしに、iAntiVirus が、ひどい暴走して、、にっちもさっちもいかないのです。。とりあえず、最近は止めっぱなしだけど。。。困ったなぁ。。

まぁ、暴走というかエラー吐きまくりで、system.log が大変な事になるんだけど。。
どなたか、対処方法とか知ってたら教えてー
Jan 23 04:54:22 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:54:52: --- last message repeated 35242 times ---
Jan 23 04:54:22 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:55:22: --- last message repeated 40570 times ---
Jan 23 04:54:23 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:55:52: --- last message repeated 38227 times ---
Jan 23 04:54:23 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:56:22: --- last message repeated 42702 times ---
Jan 23 04:54:24 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:56:52: --- last message repeated 44623 times ---
Jan 23 04:54:25 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:57:22: --- last message repeated 47837 times ---
Jan 23 04:54:25 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:57:52: --- last message repeated 58602 times ---
Jan 23 04:54:26 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:58:22: --- last message repeated 60940 times ---
Jan 23 04:54:27 104 [0x0-0x1e01e].com.pctools.iAntiVirus[200]: iAntiVirus::kFSMonitorC error in worker thread @ IODataQueueDequeue, code = -536870181.
Jan 23 04:58:52: --- last message repeated 64267 times ---

2009年1月1日

WebDAV on lighttpd

困った...起動しない...
# /usr/local/etc/rc.d/lighttpd start
Starting lighttpd.
2009-01-01 04:12:30: (plugin.c.165) dlopen() failed for: /usr/local/lib/lighttpd/mod_webdav.so /usr/local/lib/lighttpd/mod_webdav.so: Undefined symbol "uuid_unparse"
2009-01-01 04:12:30: (server.c.610) loading plugins finally failed
ports でインストールした時に、
configure: WARNING: uuid/uuid.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: uuid/uuid.h: proceeding with the compiler's result
こんなのとか出てたから怪しいんだけど、、e2fsprogs-libuuid のインストールは、問題無い感じだった。。
# uname -v
FreeBSD 7.0-RELEASE-p7 #0: Sun Dec 21 08:31:52 UTC 2008
んー、、lighttpd-1.4.20 だと、webdavは、ダメなのかなぁ。。。

2008年9月4日

Catalyst::Plugin::FormValidator::Simple が、、、

Apache/mod_perl2 で、Catalystアプリを動かしていて、、
Catalyst::Plugin::FormValidator::Simple を使ってたら、、messages.yml の設定が反映されなくて困ってて、調べてたら、、、原因を発見して、、落ち込む。。。

FormValidator::Simple は、class変数に messages.yml の設定読み込んでるので、Apacheで複数のCatalystアプリを動かしている状態だと、、messages.ymlの設定が上書きされて、、かなり困る。。。もういいや、lightppd に変更しよう。。

激しくイマサラ.....orz

2008年8月27日

メニューという都合の良いインタフェース

そば屋の味はカレーライスを売り始めた時から下降線をたどる - Life is beautiful

このエントリーを読んでいて、"めちゃめちゃ簡単さ" という事、そして "できるだけメニューの数を増やさずにサービスの価値を高めて行こう" という部分で、ふと思った事が、実は、我々開発者(自分だけかも、、)は、メニューという開発者にとって都合の良いインタフェースに頼っていたのではないかと思った。

メニューを開けば、あらゆる機能にアクセスできる、反面、あらゆる機能がそこに詰め込まれ、ユーザの選択肢を増やしてしまっている。。迷わせる。。
だから、Appleは、メニューに機能追加するのではなく、新しいインタフェースを提供する事で、ユーザに悩ませる事無く、機能追加を実現している。そして、その新しいインタフェースを、如何に自然に操作できるように提供するか、そこが一番の関心事なのだと。
機能追加自体には、何の問題も無いのだけど、その機能を提供する方法に問題があるのだろう。

豊富な機能を提供しても、必要な時に見つからなければ、何の意味も無い事。。逆に言うと、必要な時に必要な機能を提供できる事が一番なわけだから。機能提供にも、一つのシナリオが大事なのかな。ただ、そのシナリオはいろいろだから、時にユーザに不満をもたらす事となる場合もあるのかもしれない。。。
多くのインタフェースは、機能のカテゴライズと、関心事の集約、そして、違う関心事については、それぞれ、デファクト、あるいは、自然にアクセスできるところに配置する事が大事なのかなー。

ふと思ったけど、そうすると、iPhone/iPodtouchのトップ画面にあるアプリケーション群というインタフェースは、なぜ、ただ並べただけのインタフェースにしたのだろう。。。アプリケーションが増えれば増える程、選択肢が増えて、目的のアプリケーションを探すのは、手間にならないのだろうか??んー、でも、それを解決してくれるのが、アイコンなのかもしれないなー。。実際にiPhone持っているわけではないので、そこに不満を感じるかどうかは、わからないけど。。ちょっと、疑問。。

2008年8月15日

初めてのRuby - 文字列

文字列は数値の固まりなのか?
irb(main):012:0> str = "Test"
irb(main):013:0> str[0]
=> 84
irb(main):014:0> str[0,1]
=> "T"
irb(main):018:0> str[0].class
=> Fixnum
irb(main):019:0> str.class
=> String
んー、イマイチしっくり来ないなぁ、、。。
str[0]        #=> "T"
str[0].to_i # 84
とかじゃ、ダメなのかなぁ、、。

初めてのRuby - 配列の長さ付き添字と添字代入

Rubyを修得するべく、事始めに、「初めてのRuby」を購入、先日届いたので読み始めたのですが、、若干気持ち悪いところがあったので書いてみる。

1.長さ付き参照
a = [1,2,3,4]
p a[0,2] #=> [1,2,3]
これが気持ち悪い、、というのも、Perlだと
@a = (1,2,3,4);
print @a[0,2]; #=> 13
という事になる。範囲添字というものがあるのに、何故、"長さ付き添字"と"範囲添字"が同じ挙動をする必要があるのじゃろう、、。。0,2って指定してるんだから、0,2の要素が取り出せた方が良いんじゃないかな、、。。指定した要素を取り出す時は、どうするんだろう。。もう少し、読み進めるか。。。

2.添字代入
a = [1,2,3,4]
a[0..2] = "A" #=> ["A",4]
これが気持ち悪い、、ってか、消えちゃうのかよ!!なんで、こんな挙動になるんだ。。。Perlとの挙動が違うので、意図しない間違えが頻発しそうだ。。。ちゃんと把握しとかないと。。。