QY70 

日頃乗らない路線の電車に乗ったのだが、前に座っていた女性が操作していたのがYAMAHA QY70。
このページにある通りのモバイルシンセサイザなのだが、女の人がああいうモバイルマッスィーンを操作する様はいいね! こう、ぐっとくる感じ。デジタル方面にできる女って感じだし、本業は音楽なんだぜー、みたいな。
自分は音楽なんかこれっぽちもな人なので、シンセサイザを使って音楽業界のどんな事をやっているのか見当もつかないのだけど、シンセだぜー!みたいな。
で、その人の使う様では持ち方はPSPやらと似ている。両手で両サイドを持ち、人差し指は本体上部のボタンを押し、親指で前面両側にある方向ボタンなどをメインで操作、という感じ。
で、そのQY70が使い込まれているわけで、プラの銀色塗装が良く使う部分だけ剥げている所なんかプロっぽいよなぁ。「おもちゃじゃないのよ、手に馴染んだ仕事の道具。」とか言わせてぇー。

イランの音楽 

最近はIranianRadio.com - Traditionalを聞いている。やっぱり伝統的な音楽というのはどこの国のものであってもちょっと良いね。
Ardevan Kamkarという人はそれなりに有名な人らしい。

ハッシュのキーにファイルハンドル/perl 

perlでハッシュのキーにファイルハンドルを指定するのっていいんだっけ?

my(%hash);
$hash{STDIN}=100;
$hash{STDOUT}="STRING";
open(FH, "< /tmp/test") || die;
$hash{FH}=time();
foreach my $fh (keys %hash)
{ ;;;
}
close(FH);


ちょろっとテストした限りでは問題なさそうだけど、きちんとした裏付けが欲しいな。

fork()を使わないfork 

子プロセス→親プロセス方向の通信を行う場合
perlでforkして親プロセスと複数の子プロセスの間で通信を行う時、子プロセスの標準出力を親プロセスがファイルハンドルで受け取るようにするためには次のようにする。


unless($child = open($fh->[$childNum], "-|"))
{  #child
  &child();
  exit;
}else
{  #parent
  my($dummy) = $fh->[$childNum];
  #子プロセスの標準出力への出力を受け取るファイルハンドルを追加
  $select->add(* $dummy);
}
#$select->can_read()で子プロセスが出力したファイルハンドルを配列で受け取る。
while(@ready = $select->can_read)
{  foreach my $fileHandle (@ready)
  {
   my $l = <$fileHandle>;
  }
}


上記コードにより、親プロセスは$select->can_readでブロックする。親プロセスが子プロセスからの出力を受け取ると、返り値として読み込む準備のできたファイルハンドル配列を受け取る。

双方向通信を行う場合
複数の子プロセスを作り、親子間で双方向の通信を行う時にはどうやるんだっけっかな。IPC::Open3(またはIPC::Open2)を用いてforkしてやればよい模様。forkするときにopen()ではなくopen3()を用いることが異なるくらいのはず。
IPC::open3は「の」に書かれているように、STDERRのためのファイルハンドルの扱いに注意が必要でSymbol::gensymを使用して適当なファイルハンドルを用意して使う。(ここで言う"適当な"とは日常で良く使う方の意味。つまりなんでも良いけどSTDOUTのものと重複しないものを。)