Bistro gawaでランチを食べた

うーん、期待以上だった。

それにしてもU隊長の嗅覚と、手際の良さには感心する。美味しそうなとこみっけたけどドウよ?ってサイト見ながら話してたら次の日には予約してあった。

gawa

昨日の夜に、コースにするかワンプレートにするか非常に悩んだが、食べるタイミングをそろえるということでワンプレートにすることにした。

が、やっぱメニューを見ると気持ちが揺らぐ。 が、当初の予定通りワンプレートランチで。

one-plate lunch black rice

今日の魚はサワラとのこと。美味いっていうよりは旨い感じのサワラ。ビシソワーズも旨かった。あと、サラダは美味しい。

ユッキー(娘)も黒米リゾットバクバク食べてた。

お子様パスタ

で、ユッキー用に頼んだお子様パスタがうますぎ。トマトソースのパスタなんだけど、なんか食感がいい粒々なやつが入ってんの。にんにくか玉葱なのかなとか思ったけど、わからんかった。あとのってるパセリが彩りっていうより苦味がいいアクセントになってて、パセリがあるとなしとじゃ大違いだよなと思わせる系。酸味と塩味のバランスが絶妙で僕が結構食べてしまったが、ユッキーも美味しそうに食べてた。

ところで、帰りにこのパスタをめぐってひと悶着あったわけだ。要するにお子様パスタに唐辛子が入ってることの是非についてなんだが。味のバランス考えたら唐辛子は少なくとも入ってなあかんやろというのが僕の意見なんだけど、U隊長(妻)は唐辛子の入ったパスタはサビ抜いてない寿司みたいなもんで子供用ではないと。彼女は辛いものに抵抗あるしそう思うのかなと思うんだけど次は注文する前に尋ねりゃいいじゃんってことで落ち着いた。

夜も子連れOKだったら、今度はグループで行きたいが、多分またランチ行くな。次はコース頂く。

07.09.02追記

後日このページを拝見されたシェフの方が説明してくださったのですが、パスタはお子様用の他に、ランチに追加という形も取れるようです(メニューに確かに書いてあった)。で、うちの子供がまだ小さかったので追加のほうとしてオーダーを受けたそうです(なので頂いたのはお子様パスタではなかったわけです。)。

私のほうでちゃんと子供用の注文だと確認すればよかったですね。というわけで訂正しておきます。

Gaucheのdisplayとprintって

Gaucheのdisplayとprintってperlのprintとsayと似たような関係なんだろうか?と思った。

perlでcall-with-procedure

参考にしたサイト

継続渡しスタイルに載ってたcall-with-procedureをperlで。

sub call_with_procedure {
  my ($exp,$proc) = @_;
  $proc->($exp);
}

sub fact {
  my $n = shift;
  $n == 1 ? 1 : $n * fact($n-1);
}

print call_with_procedure(sub {2 * $_[0]}, sub {$_[0]->(fact(10))});

実行すると

$ perl curpr.pl 
7257600

継続ってのはgaucheだと外に向いているようなものを内側にひっくり返す感があってなんか奇妙な感じがするが、いくつか書いてみてから継続の説明を読むと、なんかフムフム感が得られる。だけど、それをperlでやろうとするとひどく混乱するのはなぜだろうか?

sub {$_[0]->(fact(10))}->(sub {2 * $_[0]})
= {2 * $_[0]}->(fact(10))
= 2 * fact(10)

書き下してみるとこんな感じか、、、、

最初のsub{}->()ってコードはautoboxを使えば動きそうな気がするが、、、

実際にやってみることにした。

use autobox;
use autobox::Core;

sub fact {
  my $n = shift;
  $n == 1 ? 1 : $n * fact($n-1);
}

print sub {$_[0]->(fact(10))}->(sub {2 * $_[0]});

無名サブルーチンが第一引数に無名サブルーチンを取ってこれが引数にfact10の結果を取ってそれを二倍するっていう処理が実行される(はず)

$ perl abtest.pl 
7257600

動いた!

call/ccの勉強してたのに、キモコードを動かすというあらぬ方向に行ってしまったが、ファーストクラスオブジェクトってのがなんだかわかったようなわからんようなホンワカした何かを得た感があったのでよしとしよう。

perlの継続の謎のおまじないがやたらと気になる

継続ブーム到来中。なんでも継続読みましたよ、何度も何度も読みまくりなのでなんども継続

もちろんperlでもやってみたくなるので、なんでも継続、Perl で。とか継続は力なり読みながら手を動かしてみた。

が、perlだと、クロージャの中

my $dummy = $cont; # なぜか必要みたい。

ってのが何故必要なのかわからないし、なんでそんなへんなのがそこにあるのかが、凄い気になるのでデバッガで追いかけた。

該当行を

#my $dummy = $cont; # なぜか必要みたい。

として perl -dで起動してみるといつまでたっても終わらない。なんか無限ループしてるっぽい。mとnの値がどんどんでかくなっていってるみたいだし、、、、。デバッガじゃなくて何が渡されてるのかprintしてみる。

 sub {
  my ($n) = @_;
  my $dummy = $cont; # なぜか必要みたい。
  print "n: $n\n";
  &leaf_count_cps ($tree->[1],
                sub {
                     my ($m) = @_;
                     print "m: $m\n";
                     $cont->($n + $m);
                    });
   });

とやってnとmを追いかけると、おまじない入りは

$ perl cont.pl # [["a", "b"], [["c", "d"], "e"]];
n: 1
m: 1
n: 2
n: 1
m: 1
n: 2
m: 1
m: 3
5

予想通りの挙動。

で、my $dummy = $contが評価されないようにしてみると

$ perl cont.pl# [["a", "b"], [["c", "d"], "e"]];
n: 1
m: 1
n: 2
m: 1
m: 3
n: 4
m: 1
m: 5
m: 7
...ずっと続く...

よくわからん。別に代入じゃなくて$contをprintしてもrefしても正常に実行されるので、クロージャの中に評価する式があることが重要みたいなんだけど、、、

山口家の逆襲->perl-解説->クロージャ

4:実体をそのまま覚えるためには、サブルーチン内でもそのレキシカル変数が使われていなくてはならない。 (サブルーチン内にその変数がなければ、実質サブルーチンはその変数を知らないのと同じコトになる)

これとか関係あるのだろうか?

goto使った継続だとおまじないがいらないってのもまた謎なんだよなぁ。

pythonでヒュッケル法

化学系だったら一度はコードを書いたことのあるヒュッケル法による軌道エネルギー計算はPython/Numpy/Pybelを使うと200行ぐらいで書けるヨというエントリをみつけた。

FORTRANだとこんな感じ

SICP 4章斜め読んだ

遅延評価とか継続とかambとか。

ちょっとついてけなくて、問題も解かずにとりあえずざっと読んだ感じ。一度立ち止まって色々調べてもう一度戻ってくる。あと、知ってる言語での実装も追いかけながらきちんと理解する。

あと5章の意義がいまいちわからん。レジスタ計算機を実装するとどういいんだろう?そこまでわかってないと継続とかきちんと理解できなさそうだっていうのはなんとなく感じるんだけど。

(4章とかを)わかっているから、5章を読むことでさらに理解が深まるという章なのではなかろうかと。

かぶれ気味かなと思いつつも、指が勝手にOn Lispを注文した。

ProductName On Lisp―Advanced Techniques for Common Lisp
Paul Graham
オーム社 / ¥ 3,990 (2007-03)
通常24時間以内に発送

検索力のこと

僕はスキルアップに重要なのは結局のところ、

  • 何がわからないのかをわかる能力
  • 検索力(知りたいことを知る術)

に尽きるんではなかろうかと思ってイル。

検索力を広義に解釈すれば、知りたいことを知ってるヒトに教えてもらうという能力もリッパな検索力だろうなぁと思うような事があったので、そのとき考えたことをメモっておく。

教わるという行為は結局のところ、教える側に委ねられてるわけで、ヒトの知識とかノウハウをたいしたコストなしにもらうわけだから謙虚さが必要だ。だから、ヒトに教えを受けている最中なのに、ちょっとかじったぐらいの知識で「それは知ってる。むしろ僕の知りたいことは云々」とかいって話の腰を折ることを繰り返したりすれば、教えるほうも嫌になるだろうし、「ググれば君ならわかるから大丈夫!」なんて切り替えされるようになったらスキルアップの機会的に大きな損失だ。

「それは知ってる。むしろ僕の知りたいことは云々」と言いたくなる、つまり自分の期待している答えが返ってこない事自体、本人の問い合わせ能力の低さを露呈しているだけか、そもそも問い合わせるべき人間を間違えている(検索先を選ぶ能力が低い)のではなかろうか?と自問自答してみる必要があるだろう。

「ちゃんと教えてくれたら3分で済んだのに、ググって調べなきゃいけなかったので調べものに3時間かかった」は、 「検索能力が低いので3分で済むはずの仕事に3時間費やした」 と言い換えてもいいだろうし、「教わればわかる」というのは裏返せば「教わらなければわからない」だ。

そういう論理でいけば、教える側に

教えなきゃわからんやつは教えてもわからん

なんてのは十分アリかなとか思った。

キーボードの-が遠すぎ

マイナスたたくとき右手の小指を少し伸ばすので打ちまくると指がつりそうになることがあるんだけど、単にストロークポジションが悪いだけなのか?なんか指が寝気味なだけの気もするが、、、

Text::CSV::Simpleでピボット

単純なピボットがしたかった。

use Text::CSV::Simple;
my $file = shift;

my $parser = Text::CSV::Simple->new;
my @list = qw/cl1 cl2 cl3 cl4 cl5/;
$parser->field_map(@list);
my @data = $parser->read_file($file);

my $pivdata = {};

for my $d (@data){
 for my $label (@list){
   push @{$pivdata->{$label}},$d->{$label};
 }
}

for my $label (@list){
 print join ",", @{$pivdata->{$label}};
 print "\n";
}

google videoのgvp形式のダウンロードがない?

SICPの4章とか読み始めたらDSLが気になってきてJesse Vincent - Abusing Domain Specific Languages for Fun and Profitをちゃんと見ようと。

で、気付いたんだがgoogle video playerってどうなっちゃったんだろうか?

まぁいいかってことで、mp4で落とそうとすんだけどなぜか10Mぐらいでこけてしまう。