Rで学ぶデータマイニング

目次を見る限り、一部と二部を分冊にしたほうが嬉しいかも。

二部だけだったら買ったと思うが無駄に分厚かったりするとやなので書店で立ち読みしてから、買うか買わないか決めよう。てか、九天のRの本は紙質とか構成がなんとなくアレな気がするんだけど、この本はどうだろう?

elispで高階関数

昨日弱音を吐いたけど、小鼓呑んで頭がまわってないだけだった。(どうしても日本酒が飲みたくてローソンで買った。ゴールデンウィークは実家に帰って会津とか那須のほうの酒を物色予定)

SICPのp.32はこんな感じで

(defun inc (n) (+ n 1))

(defun cube (x) (* x x x))

(defun sum (term a next b)
(if (> a b) 0
  (+ (funcall term a)
     (sum term (funcall next a) next b))))

(sum 'cube 1 'inc 10)
3025

関数はクォートして評価されないようにしといて、高階関数のほうでfuncallで評価する。こんな感じになってくるとなんかperlのリファレンス操作してるみたいだ。

とか思ったのでperlでも書いてみた。

my $inc = sub {$_[0] + 1};
my $cube = sub {$_[0] ** 3};

sub sum {
  my ($term,$a,$next,$b) = @_;
  return 0 if $a > $b;
  $term->($a) + sum($term,$next->($a),$next,$b);
}

print sum($cube,1,$inc,80);

Emacs辞典の4章がelispの基礎でわかりやすい。

ProductName Emacs 辞典 (DESKTOP REFERENCE)
佐藤 竜一
翔泳社 / 3129円 ( 2006-05-11 )


あと

(sum 'cube 1 'inc 51)

(error "Lisp nesting exceeds max-lisp-eval-depth")

っていうエラーがでた(Meadow)

CatalystのTTのレンダリング時間を計る

ちょっと前に作ったCatalystのアプリのView::TT->processが相当遅いので、プロファイリングできんかなと調べた。

DBICだとこんなんが使えるらしいが、TTの場合はconfigにTIMERをセットするとレンダリング時間を測定してソースのコメントに突っ込んでくれる。

犬動画チャンネルいい

ユッキー(娘,1才)がワンワン大好きでお風呂上りにRimoの動物チャンネルなどで画面に釘付けにさせといてパジャマを着せる作戦など有効だ。

というわけで、バーバの家でもWiiでRimo見たい!と応募してみるヨ

任天堂「Wii」プレゼントキャンペーン

elispで高階関数を書こうとして後悔

このあたりでなんか嫌な予感がしてたのだけど、elispでの高階関数の書き方がわからん。

いろいろ悩んでみたものの

SICPを読み始めた目的はHOP本をより楽しく読むためだということを思い出し、普通にschemeでもいいかな?と弱音を吐いてみた。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 6402円 ( 2005-03-28 )


というわけで、Gaucheもあわせて使っていくことにした。

ただ、elispの件はゴールデンウィーク中にでもちゃんと調べる。

elispでパスカル三角形

こんな感じで

(defun pscl (x y) 
  (cond ((< y 3) 1)
        ((= x 1) 1)
        ((= y x) 1)
        (t (+ (pscl (- x 1) (- y 1)) (pscl x (- y 1))))
        ))

elispでackerman関数

schemeだとelseのところがelispだとtになる。どの条件にも当てはまらないとnilだから、elseはtで表現するらしい。

(defun A (x y)
  (cond ((= y 0) 0)
        ((= x 0) (* 2 y))
        ((= y 1) 2)
        (t (A (- x 1)
            (A x (- y 1))))))

Ackerman関数ってのが良く分からなかったので調べたら爆発的に計算量が増える関数らしい。しかも末尾再帰的にならないらしい

newするときにデフォルト値をもたせるというか、perlのハッシュのこと

404 Blog Not Found:perl - 万能なnewの書き方

しかし、デフォルト値を持たせたければどうすればよいか、こうすればよい。

bless { %default, @_ }, $class;

これでなんでうまくいくのかよくわからなかったのでperlshでいろいろ動かしてみた。

main[61]$ %a = (name => 'anon', pet => 'none')
name
anon
pet
none
main[62]$ %b = (name => 'kzfm', pet => 'hana')
name
kzfm
pet
hana
main[63]$ %c = (name => 'yuki')
name
yuki
main[64]$ $d = bless {%a,%b}
main=HASH(0xa123ce8)
main[65]$ print Dumper($d)
$VAR1 = bless( {
                 'pet' => 'hana',
                 'name' => 'kzfm'
               }, 'main' );
1
main[66]$ $g = bless {%a,%c}
main=HASH(0xa123e94)
main[67]$ print Dumper($g)
$VAR1 = bless( {
                 'pet' => 'none',
                 'name' => 'yuki'
               }, 'main' );
1

別にblessせんでも

main[77]$ $d = {%a,%b}
HASH(0xa123ce8)
main[78]$ print Dumper($d)
$VAR1 = {
          'pet' => 'hana',
          'name' => 'kzfm'
        };
1
main[79]$ $g = {%a,%c}
HASH(0xa123d24)
main[80]$ print Dumper($g)
$VAR1 = {
          'pet' => 'none',
          'name' => 'yuki'
        };
1

うーん、思った通りに動いている。というわけで、一度アレイにしてみる。

main[88]$ $d = [%a,%b]
ARRAY(0xa123fd8)
main[89]$ print Dumper($d)
$VAR1 = [
          'pet',
          'none',
          'name',
          'anon',
          'pet',
          'hana',
          'name',
          'kzfm'
        ];
1

ちゃんとアレイができているので、これをハッシュのリファレンスにしてみる。

main[90]$ $x = {@{$d}}
HASH(0xa124080)
main[91]$ print Dumper($x)
$VAR1 = {
          'pet' => 'hana',
          'name' => 'kzfm'
        };
1

おー、思ったとおり。

アレイからハッシュにするときにインデックス値の小さい順に評価されていって、同じキー値を持つものは上書きされていくのか。

プロバイダ乗り換えようか

やばそうとわかっていつつ、DDNS使っているjspeedこんなことになってるし。

そろそろなんとかしなければ、、、、、

blogだけならレンタルサーバーもありかもしれんけど、サーバーいじるのがメインだからこの選択肢はなし。じゃぁ、独自ドメイン+固定IPにするかと思ったけど、最近どこがいいのか全然わからん。っていうか光の仔になりたい(ADSLで基地局から遠すぎて1.5だし)。

とりあえず

  • 自宅サーバー
  • 独自ドメイン
  • 固定IP

でいけそうなとこを調べてみたら以下が該当(かなりおおざっぱ)

いろいろ検討した結果、さくらにしてみようか。

デザイン思考の道具箱

読んで素直に面白かった。思いついたらすぐ作ってみるっていうことを実践するための組織のつくりかたとかそんな感じ。

なんかTDDとかアジャイル開発にかぶるような気がするんだけど、いまいち消化しきれてないかも。

ただし、実践するには結構ハードルが高そう。レビューにも

あとはこの手法をどうやって自身で実行するかは、読者の問題となる。

と書いてあるように、この部分を抜いて読めば色々な発見があるし、試してみたいこともある。

こんなんをもとに、独りブレストとか独りイノベーションとか考えていくとおもろいかも。